我需要写这个来计算NR = 0-500,500-1000,1000-1500等之间的行直到结束,并从1开始。
awk "{NR<=500 && "/^1/" && sum+=1}; END {print sum}" 1.txt
awk "{NR>500 && NR<=1000 && "/^1/" && sum+=1}; END {print sum}" 1.txt
awk "{NR>1000 && NR<=1500 && "/^1/" && sum+=1}; END {print sum}" 1.txt
.....
这是我的问题,如何将这些文件放入文件(* .awk)中同时运行..
答案 0 :(得分:0)
如果你希望脚本是纯awk,你需要一个带有-f的shebang行。将此行作为文件之一:
#!/usr/bin/awk -f
(或根据您要使用的awk的位置进行调整)
这种方法的一个重大缺点是你必须在脚本中硬编码awk的路径。该问题的典型解决方案(使用/ usr / bin / env)不适用于awk或sed,因为它们需要shebang中的-f。如果您只想在awk周围使用shell脚本包装器,可以执行以下操作:
#!/bin/sh file=${1-1.txt} awk "{NR<=500 && "/^1/" && sum+=1}; END {print sum}" $file awk "{NR>500 && NR<=1000 && "/^1/" && sum+=1}; END {print sum}" $file awk "{NR>1000 && NR<=1500 && "/^1/" && sum+=1}; END {print sum}" $file
答案 1 :(得分:0)
你可以尝试将这些命令放在一个文件中,例如myscript.awk
NR<=500 && /^1/ { sum1 += 1 }
NR>500 && NR<=1000 && /^1/ { sum2 += 1}
NR>1000 && NR<=1500 && /^1/ { sum3+=1 }
END { print sum1,sum2.sum3 }
然后在命令行上运行
awk -f myscript.awk 1.txt
你不需要在同一个文件上调用awk 3次!它是低效编码的一个例子。
只有当您想要像#!/usr/bin/awk -f
那样运行时,您才可以在脚本的第一行输出一个shebang ./myscript.awk
,否则,您可以将其删除
答案 2 :(得分:0)
未经测试,但这应该替换所有重复的行:
awk '/^1/ {sum++} NR % 500 == 0 {print sum; sum=0} END {print sum}' 1.txt