我是awk的新手,无法弄清楚如何处理下一个记录列,任何帮助都将不胜感激。 需要:
$ cat sample.csv
1,1,1,30,40,23,24,25,26,27,28,29,0,0,0,0,0,0,0,0
1,2,1,35,40,33,34,35,36,37,38,39,12,13,14,15,16,17,22,36
1,3,1,45,50,43,44,45,46,47,48,49,22,23,24,25,26,27,33,38
我能够获得所需的一半,在第1行中,我无法处理第2行的值
$ cat sample.csv | awk -F"," '{a+=$4}{b+=$5}{c+=$6}{d+=$7}{e+=$8}{f+=$9}{g+=$10}{h+=$11}{i+=$12}{j+=$13}{k+=$14}{l+=$15}{m+=$16}{n+=$17}{o+=$18}{p+=$19}END{print "Line 1 " a+b-c-d-e-f-g-h}'
第1行-399
我正在寻找表达式a+b-c-d-e-f-g-h - (NextRecord i+j+k+l+m+n)
对于最后一条记录,我们可以将下一个记录值视为0。
答案 0 :(得分:1)
我认为END块让你搞砸了。我对awk
的有限知识包括它与perl模糊地相似,并且至少在perl END
中运行的过程最后。所以你只得到一行,因为你告诉那个代码块在整个过程完成执行之前不会运行。
awk -F"," '{a+=$4}{b+=$5}{c+=$6}{d+=$7}{e+=$8}{f+=$9}{g+=$10}{h+=$11}{i+=$12}{j+=$13}{k+=$14}{l+=$15}{m+=$16}{n+=$17}{o+=$18}{p+=$19} {print "Line 1 " a+b-c-d-e-f-g-h}' sample.csv
另请注意,您不需要捕获文件并将其传递到awk
,它接受一个文件作为最后一个参数。
答案 1 :(得分:0)
试试这个awk命令:
bob
<强>输出强>
name:
<强>解释强>
awk -F, 'NR!=1{print "Line", NR-1, (l-$12-$13-$14-$15-$16-$17)} {l=($4+$5-$6-$7-$8-$9-$10-$11)} END {print "Line", NR, l} ' /tmp/sample.csv