Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
awk在命令中拆分并运行计算_Awk - Fatal编程技术网

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
不是varreable
a1
的值,而是
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