awk在命令中拆分并运行计算
这是为了我自己的学习,但假设我有下面的awk在命令中拆分并运行计算,awk,Awk,这是为了我自己的学习,但假设我有下面的输入文件,在运行awk命令之前,需要在-之前拆分$5。基本上,我通过使用$3-$2对所有匹配的$5字符串求和,输出行数和总数,但如果不进行拆分,它们都是不同的。我以前可以拆分文件,但我很好奇是否可以在一个awk中完成所有操作。如果在运行awk之前对文件进行拆分,则commandd将在该文件上工作。谢谢:) 输入 chr1 955543 955763 chr1:955543-955763 AGRN-6|gc=75 chr1 957571 9
输入
文件,在运行awk
命令之前,需要在-
之前拆分$5
。基本上,我通过使用$3-$2
对所有匹配的$5
字符串求和,输出行数和总数,但如果不进行拆分,它们都是不同的。我以前可以拆分文件,但我很好奇是否可以在一个awk
中完成所有操作。如果在运行awk
之前对文件进行拆分,则commandd将在该文件上工作。谢谢:)
输入
chr1 955543 955763 chr1:955543-955763 AGRN-6|gc=75
chr1 957571 957852 chr1:957571-957852 AGRN-7|gc=61.2
AGRN 2 501
awk
awk '{split($5,a,"-"); a[1]} {c1[$a1]++; c2[$a1]+=($3-$2)}
END{for (e in c1) print e, c1[e], c2[e]}' input > out
**电流输出**(无拆分)
所需输出
chr1 955543 955763 chr1:955543-955763 AGRN-6|gc=75
chr1 957571 957852 chr1:957571-957852 AGRN-7|gc=61.2
AGRN 2 501
我在脚本中看到的唯一问题是对
c1[$a1]
和c2[$a1]
的引用。请记住,美元符号不是字符串的指示符,您应该更多地将其视为选择器或数组,其索引是行中字段的位置
这意味着,$a1
不是varreablea1
的值,而是a1
变量字段中的值。证明:
$ echo "one two three" | awk '{ n=2; print $n }'
只要去掉多余的美元符号,你就可以开始了
顺便说一句,当我运行错误的脚本时,我没有得到与您相同的输出。相反,我得到了一个错误:
awk: illegal field $(), name "a1"
input record number 1, file inp1
source line number 1
我正在使用BSD awk。当我使用GNU awk(gawk)运行您的脚本时,我没有得到错误。如果您要进行大量的awk编程,我建议您选择另一个或两个awk,看看不同的实现如何解析您的代码,当事情没有按预期运行时。我无法解析您的问题描述。您希望发生什么以及发生什么?输出
ARGN
的$3-$2
总数和ARGN
计数。但是,如果在输入中对$5
进行拆分
,使ARGN
不唯一,则计数将无法工作。这有用吗?。谢谢:)。通常,发布a)输入示例(完成)b)该示例的预期输出(缺失)和c)您迄今为止的尝试(完成)是一个好主意。添加b)我更新了输出。谢谢:)。所需的输出是否应为ARGN 1 501?7减6在我看来像1。在GNU系统上,我认为这是对echo的无用使用,但我知道你是一个BSD的家伙。。唉……;)嘿,是的。我大部分时间都不承认这一点,但我使用tcsh作为交互式shell:-D