awk初学者关于将一些命令放入像abc.awk这样的程序文件中的问题

awk初学者关于将一些命令放入像abc.awk这样的程序文件中的问题,awk,Awk,我需要写这篇文章来计算NR=0-500、500-10001000-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=0-500、500-10001000-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中以同时运行..

如果希望脚本是纯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
您可以尝试将这些命令放在一个文件中,例如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三次!这是编码效率低下的一个例子


你可以发出一声“啪啪”的声音/usr/bin/awk-f仅当您希望像/myscript.awk一样运行脚本时,才在脚本的第一行中显示,否则,您可以将其保留为未经测试的

,但这将替换所有重复的行:

awk '/^1/ {sum++} NR % 500 == 0 {print sum; sum=0} END {print sum}' 1.txt

我明白我的错误,我从一开始就把BEGIN语句`
awk '/^1/ {sum++} NR % 500 == 0 {print sum; sum=0} END {print sum}' 1.txt