Bash awk脚本可以在纯文件上工作,但不能在tail+;2.
我有我的脚本,它获取所选文件的3列的最大值。若文件是纯的,那个么它工作得很好,但若我尝试用tail+2来管道文件,那个么它就不再工作了。代码如下:Bash awk脚本可以在纯文件上工作,但不能在tail+;2.,bash,shell,awk,Bash,Shell,Awk,我有我的脚本,它获取所选文件的3列的最大值。若文件是纯的,那个么它工作得很好,但若我尝试用tail+2来管道文件,那个么它就不再工作了。代码如下: BEGIN {max1 = 0; max2 = 0; max3 = 0} { if(max1 < $1) max1 = $1 if(max2 < $2) max2 = $2 if(max3 < $3) max3 = $3 } END {print max1, max2, max3;} BEGIN{max1=0;max2=0;ma
BEGIN {max1 = 0; max2 = 0; max3 = 0}
{
if(max1 < $1)
max1 = $1
if(max2 < $2)
max2 = $2
if(max3 < $3)
max3 = $3
}
END {print max1, max2, max3;}
BEGIN{max1=0;max2=0;max3=0}
{
如果(最大值1<$1)
max1=1美元
如果(最大值2<$2)
max2=2美元
如果(最大3<$3)
max3=3美元
}
结束{print max1,max2,max3;}
我执行如下代码:awk-f[codefilename][targetfile]
效果100%好
我执行如下代码(希望在计数前删除第一行):
awk-f[codefilename][targetfile]| tail+2
它失败了
感谢您的帮助和时间。考虑一下您的例子:
awk -f codefilename targetfile | tail+2
首先,您需要在tail
和+2
之间留一个空格。其次,awk
命令的输出通过管道传输到tail,因此基本上类似于写入:
awk -f codefilename targetfile > tmp1
tail +2 tmp1
我想您需要的是从targetfile
中提取除第一行以外的所有内容,并在其上运行您的awk代码,如果您需要:
tail +2 targetfile | awk -f codefilename
并非所有发行版都支持Afaik
tail+N
,您需要类似于sed-N'2,$p'
的内容。如果有人能澄清,请澄清。我想你想要:tail+2 targetfile | awk-f code文件名
谢谢你,成功了!在这一点上我还是很生疏:如果你习惯于把文件名放在末尾,你也可以这样做awk。。。很好,以后会知道的。我使用的是SunOS 5.11,所以它支持+N。很好:D。再次感谢您提供的信息。p、 是的,tail和+2之间的空格是语法错误,我的错。当然你根本不需要tail+2
,awk完全可以跳过行:NR>1{…code…}
@PauliusMickus顺便说一句,你的最大值计算通常是错误的-读取第一个值时,不要假设有一个值大于零。@Ed Mordon ty会记住这只适用于正数。只需将BEGIN{max1=0;max2=0;max3=0}
更改为NR==1{max1=$1;max2=$2;max3=$3}
并且它对任何数字都有效(或者如果您跳过awk中的第一行,则为NR==2
)。