Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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
Bash awk脚本可以在纯文件上工作,但不能在tail+;2._Bash_Shell_Awk - Fatal编程技术网

Bash awk脚本可以在纯文件上工作,但不能在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

我有我的脚本,它获取所选文件的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;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
)。