使用awk的两个不同的分隔符来分割和选择列
我如何告诉gawk使用两个不同的定界器,以便我可以分开一些列,但是使用文件的选项卡 - 删除格式选择其他列? > cat broad_snps.tab chrsnpID rsID freq_bin snp_maf gene_count dist_nearest_gene_snpsnap dist_nearest_gene_snpsnap_protein_coding dist_nearest_gene dist_nearest_gene_located_within loci_upstream loci_downstream ID_nearest_gene_snpsnap ID_nearest_gene_snpsnap_protein_coding ID_nearest_gene ID_nearest_gene_located_within HGNC_nearest_gene_snpsnap HGNC_nearest_gene_
10 2024-03-31
编程技术问答社区
grep -Ff产生无效的输出
我正在使用 代码 - grep -Ff list.txt C:/data/*.txt > found.txt 但它一直在输出无效的响应,行不包含我输入的电子邮件. list.txt包含 - email@email.com customer@email.com imadmin@gmail.com newcustomer@email.com helloworld@yes.com 等等..电子邮件以匹配每行, 搜索文件包含 - user1:phonenumber1:email@email.com:last-active:recent user2:phonennumber2:customer@email.com:last-active:inactive user3:phonenumber3:blablarandom@bla.com:last-active:never 然后另一个可能包含 - blublublu email@e
2 2024-03-29
编程技术问答社区
使用sed与w命令管道显示空闲时间最长的用户
W命令产生类似的东西: 01:19:02 up 53 days, 10:44, 15 users, load average: 0.00, 0.02, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT higrheht pts/5 c-13-76-207-161. 23:21 2:05 0.07s 0.07s -bash sgergrgr pts/6 c-97-164-31-14.h 00:54 2.00s 0.04s 0.04s -bash jwegrgrng pts/14 c-23-71-12-251.h 22:48 8:03 0.07s 0.06s vim s2 hiqrefan pts/18 c-13-31-206-169. 23:19 0.00s 0.01s 0.01s -bash hqeffran pts/1
10 2024-03-29
编程技术问答社区
Bash。从命令行输出中抓取部分字符串
我正在CentOS中运行一个命令,该命令为我提供了一个字符串的输出,我想抓住该输出的某些部分并将其设置为变量. 我运行命令ebi-deScribe-env. 我的输出如下: ApplicationName | CNAME | DATECreated | DateUpdated | Description | EndpointURL | EnvironmentID | EnvironmentName | Health | Stack | Status | TemplateName | Version Label -------------------------- Web App | domain.com | 2012-02-23 | 2012-08-31 | | anotherdomain.com | e-8sgkf3eqbj | Web-App-Name | Status | Linux | Ready | N/A | 20120831 - daily
6 2024-03-29
编程技术问答社区
如果该行包含超过特定数量的非数字值,则删除该行
我有一个大的(2GB)逗号分隔的文本文件,其中包含来自传感器的一些数据.有时传感器关闭,没有数据.如果每行中的No Data或Off>或any non-numeric值的指定数量超过指定的数量,我想删除行;不包括标题.我只对从第三专栏开始计数感兴趣.例如:我的数据看起来像: Tag, Description,2015/01/01,2015/01/01 00:01:00,2015/01/01 00:02:00, 2015/01/01 00:02:00 1827XYZR/KB.SAT,Data from Process Value,2.1,Off,2.7 1871XYZR/KB.RAT,Data from process value,Off,No Data, No Data 1962XYMK/KB.GAT,Data from Process Value,No Data,5,3 1867XYST/KB.FAT,Data from process value,1.05,5.87,7.80
4 2024-03-28
编程技术问答社区
awk:保留共享一个字段的最高值的记录,而忽略其他字段
想象一下,您想在表的给定字段中保持记录最高值,只是在另一个字段定义的类别中进行比较(而忽略其他字段的内容). so,给定输入nye.txt: X A 10.00 X A 1.50 X B 0.01 X B 4.00 Y C 1.00 Y C 2.43 您期望此输出: X A 10.00 Y C 2.43 这是以前相关线程的偏僻: awk:保持最高价值的记录,比较那些共享其他字段的记录 我已经有一个解决方案(见下文),但是欢迎想法! 解决方案 awk 这样的东西: awk '$3>=a[$1]{a[$1]=$3; b[$1]=$0} END{for(i in a)print b[i]}' File 对于每个1st column value(x,y等.),如果3rd column value大于或等于先前存储的巨大值(即a[$i];最初默认情况下是0),则使用此3rd column value更新[$ i].还将整个行保存在阵列b中.在END
8 2024-03-28
编程技术问答社区
awk读浮点数:不能读小的浮点数,如4e-320
我无法获得awk或gawk以科学符号读取小浮子,并正确解释为浮点数. 我只想用尴尬的小门槛输出数字. 示例: 考虑以下输入: 4 3e-20 4.5e-320 3 1e-10 我想在1E-15之前阈值,所以我要做以下操作: echo -e "4\n3e-20\n4.5e-320\n3\n1e-10" | awk '$1 > 1e-15' 提供输出: 4 4.5e-320 3 1e-10 当然,4.5e-320不会通过1E-15阈值,而是awk和gawk无法拒绝它! 我查找(g)awk浮点精度.它似乎仅适用于 awk中的算术操作. 因此,用awk '$1 > 1e-15'替换awk '$1 > 1e-15'也会失败.它也因PREC="quad" 而失败 因此,我得出结论,(g)awk不是读取 4.5e-320作为浮点,而是字符串? 解决方案 我从3.1.5版中获得了预期输出. 我从3.1.7版本中获取您的输出
2 2024-03-28
编程技术问答社区
如何在gawk中把日期字符串转换为时间戳?
我正在通过以下格式的日志文件进行扫描: 76.69.120.244 - - [09/Jun/2015:17:13:18 -0700] "GET /file.jpg HTTP/1.1" 200 22977 "http://example.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36" "16543" "ewr1" "0.002" "CA" "Bell Canada" "2" 76.69.120.244 - - [09/Jun/2015:17:13:19 -0700] "GET /differentfile.bin HTTP/1.1" 206 453684 "http://example.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/53
8 2024-03-28
编程技术问答社区
awk:保留最高值的记录,比较那些共享其他字段的记录
我正在尝试编写一个尴尬脚本,该脚本在给定字段中保持最高值的记录,但仅比较共享其他两个字段的记录. 我最好举一个例子 - 这是input.txt: X A 10.00 X A 1.50 X B 0.01 X B 4.00 Y C 1.00 Y C 2.43 我想比较在第一个和第二个字段(x a,x b或y c)中共享相同值的所有记录,并选择第三字段中具有最高数值的记录. 所以,我希望这个输出: X A 10.00 X B 4.00 Y C 2.43 使用此片段,我可以在第三字段中选择具有最大值的记录(但它没有考虑到以前的字段,并且也不会输出它们): awk 'BEGIN {max = 0} {if ($2>max) max=$2} END {print max}' input.txt 电流(不需要的)输出: 10.00 有什么想法吗?我可以使用gawk. 预先感谢! 解决方案 您可以使用此尴尬: awk '{k=$1
4 2024-03-28
编程技术问答社区
最接近的值不同的文件,有不同的行数和其他条件(bash awk other)。
我必须复活,旧问题对长文件进行了修改. 我有两个文件中的两个星(file1和file2).恒星时代的圆柱为1美元,其余的专栏最高为13美元,是我最终需要打印的信息. 我试图找到一个年龄的年龄,使星星的年龄相同或年龄最接近.由于文件太大(〜25000行),因此我不想在整个数组中搜索速度问题. 另外,它们的线路数量可能很大(在某些情况下可以说〜10000) 我不确定这是否是解决问题的最佳方法,但是由于缺乏更好的问题,这是我的想法. (如果您的方法更快,更有效,请这样做) 所有值均具有12个精度小数.就目前而言,我只关心第一列(年龄是). 我需要不同的循环. 让我们从文件1: 中使用此值 2.326062371284e+05 首先,例程应在file2中搜索所有包含 的匹配项 2.3260e+05 (此循环可能会在整个数组中进行搜索,但是如果有一种方法可以停止搜索,则它很快达到2.3261,则可以节省一些时间) ) 如果仅找到一个,则输
4 2024-03-28
编程技术问答社区
AWK是否可以读取一个时间字段并用于排序?
我有两个文件,我需要根据时间列对行进行排序和合并: 文件A: "2014-02-26 16:03:04" "Login Success|isNoSession=false" id=csr,ou=user,dc=openam,dc=forgerock,dc=org 7efb2f0e035a0e3d01 10.17.174.30 INFO dc=openam,dc=forgerock,dc=org "cn=dsameuser,ou=DSAME Users,dc=openam,dc=forgerock,dc=org" AUTHENTICATION-100 DataStore "Not Available" 10.17.174.30 文件B: "2014-02-26 16:02:27" "Login Failed" dennis "Not Available" 10.17.174.30 INFO dc=openam,
6 2024-03-28
编程技术问答社区
Awk对单个字符进行分串
这是columns.txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以" B"开头的行: awk '{if(substr($2,1,1)=="b") {print $0}}' columns.txt 我可以找到第二列以" bb"开头的行: awk '{if(substr($2,1,2)=="bb") {print $0}}' columns.txt 为什么哦,为什么我找不到第二列中的第二个字符是" b"的行?: awk '{if(substr($2,2,2)=="b") {print $0}}' columns.txt awk -W version == gnu awk 3.1.8 解决方案 您可以使用: awk 'substr($2,2,1) == "b"' columns.txt aaa
10 2024-03-28
编程技术问答社区
命令行透视
过去几天我一直在寻找一套命令行工具,一个perl或awk脚本,使我可以很快地转换以下数据: Row|Col|Val 1|A|foo 1|B|bar 1|C|I have a real 2|A|bad 2|C|hangover 进入这个: A|B|C foo|bar|I have a real bad||hangover 请注意,每个"单元格"的数据集中只有一个值(即,与电子表格一样,行" 1" 1" col" a" a") 没有任何重复. 我尝试了各种尴尬的实现来转移数据 - 但似乎无法使它们起作用.我的一个想法是将每个" col"值切入一个单独的文件中,然后使用"加入"命令行将它们放回"行"中 - 但是必须有一种更简单的方法.我敢肯定这简直太简单了 - 但是我正在努力. 我的输入文件具有cols a至g(主要包括可变长度字符串)和10,000行.如果我可以避免将所有内容加载到内存中,那将是一个巨大的优势. bee beer-mail供任何答案的人!
6 2024-03-28
编程技术问答社区
awk排序多维数组
gnu awk支持多维阵列: q[1][1] = "dog" q[1][2] = 999 q[2][1] = "mouse" q[2][2] = 777 q[3][1] = "bird" q[3][2] = 888 我想对q的"第二列"进行排序,以便我留下: q[1][1] = "mouse" q[1][2] = 777 q[2][1] = "bird" q[2][2] = 888 q[3][1] = "dog" q[3][2] = 999 您可以看到"第一列"值移动以与第二个值保持.我懂了 gnu awk提供 asort函数 多维阵列.如果有帮助,这是 工作红宝石示例: q = [["dog", 999], ["mouse", 777], ["bird", 888]] q.sort_by{|z|z[1]} => [["mouse", 777], ["bird", 888], ["dog", 999]] 我最终使用了常规数组,然后用新线分开重复项: q
6 2024-03-28
编程技术问答社区
用AWK从两个文件中减去n列的数量
我有两个列数 的文件 file1: A 1 2 3 ....... Na1 B 2 3 4 ....... Nb1 file2: A 2 2 4 ....... Na2 B 1 3 4 ....... Nb2 我想要一个输出,其中File1中的第一列值将从File2的第1列中减去1,然后使用列,直到n列N,如下所示: A -1 0 -1 ........ (Na1-Na2) B 1 0 0 ........ (Nb1-Nb2) 如何做到这是尴尬,或在Linux环境中拼写脚本? 解决方案 类似的东西: use strict; use warnings; my (@fh, @v); for (@ARGV) { open (my $handle, "
10 2024-03-28
编程技术问答社区
在AWK中,字段是否在END块中定义?
使用$1,$2 ...在END块中会发生什么,例如: awk '{print $3}END{print $1 $2}' 我发现$1和$2保留了最后记录中的值.这种行为是由标准保证的还是特定于实施的? 解决方案 检查 传统上,主要由于实施问题,$ 0和NF是 在最终规则中未定义. POSIX标准指定NF是 在最终规则中可用.它包含来自 最后输入记录.很可能是由于监督,标准 并不是说$ 0也保留了,尽管从逻辑上来说, 认为应该是.实际上,所有BWK Awk,Mawk和Gawk 保留在最终规则中使用$ 0的值. 请注意, 其他一些实现和许多较旧版本的Unix Awk不会.
10 2024-03-28
编程技术问答社区
如何向包含gawk match()的脚本传递一个包含空白的参数?
>gawk 'match("", "foo bar", junk)' 是一个合法命令,我想在shell脚本中传递参数foo bar: foobar.sh具有: #!/bin/bash gawk 'match("", "'$1'", junk)' 不起作用: >./foobar.sh "foo bar" gawk: match("", "foo gawk: ^ unterminated string 如何做? 解决方案 应该使用-v选项传递: gawk -v arg="foo bar" 'match("", arg, junk)' 其他解决方案 您忽略了避免单词分类所需的引号: gawk 'match("", "'"$1"'", junk)' 没有这些引号,字符串分为两个单词: match("", "foo bar", junk) awk坚持认为该程序是一个参数(下一个参数将被视为文件名),因此如观察
6 2024-03-28
编程技术问答社区
与awk一起使用的正则表达式中的量词表现出人意料的效果
我想处理此列表:(这只是摘录.) 1 S3 -> PC-8-Set 2 S3 -> PC-850-Set 3 S3 -> ANSI-Set 4 S3 -> 7-Bit-NRC 5 PC-8-Set -> S3 6 PC-850-Set -> S3 7 ANSI-Set -> S3 这就是我所做的: awk -F '[[:blank:]]+' '{printf ("%s ", $2)}' list 这就是我得到的: 1 2 3 4 5 6 7 现在,我认为量词+等于{1,},但是当我将行更改为 时 awk -F '[[:blank:]]{1,}' '{printf ("%s ", $2)}' list 我只有空白,整个行被读取至$1. 有人可以解释这种行为吗?我感谢每个答案! 解决方案 尝试 awk --re-interval -F '
10 2024-03-28
编程技术问答社区
使用awk的一个最近的邻居
这是我尝试使用尴尬语言做的事情.我在主要步骤2上有问题.我显示了一个示例数据集,但原始数据集由100个字段和2000个记录组成. 算法 1)初始化精度= 0 2)对于每个记录r Find the closest other record, o, in the dataset using distance formula 要找到R0最近的邻居,我需要将R0与R1与R9进行比较,然后进行数学如下: square(abs(r0.c1 -r1.c1))) + square(abs(r0.c2) -r1.c2)) + ... + square(abs(r0.c5 -r1.c5)) 并存储这些距离. 3)一个具有最小距离的一个,比较其C6值.如果C6值等于1. 重复所有记录的过程后. 4)最后,通过 (准确/total_records) * 100; 示例数据集 c1 c2 c3 c4 c5 c6
8 2024-03-28
编程技术问答社区
gawk / awk:在getline中输入日期,有时无法工作。
我正在尝试将日期从一种格式转换为另一种格式: 从例如" 2005年10月29日"至2005-10-29. 我有625个日期的列表.我使用尴尬. 转换有效 - 大多数时候. 霍维尔,有时转换根本不会发生, 并且变量应该保留(转换后的)日期 未定义. 这总是发生在完全相同的行中. 在日期上明确运行`date' 这些怪异的行效果很好(日期已正确转换). - 重要的不是这些行的文字内容. 为什么这种行为以及如何修复脚本? 她是: awk 'BEGIN { FS = "unused" } { x = "undefined"; "date \"+%Y-%m-%d\" -d " $1 | getline x ; print $1 " = " x }' uBXr0r15.txt \ > bug-out-3.txt 如果要复制此问题: 下载此文件: ubxr0r15.txt . 运行Awk Skript. 在bug-out-3.txt中搜索"未定义"
4 2024-03-28
编程技术问答社区