2011-06-30 46 views
-1

我使用awk,并希望将任意数量的文本文件(参数)发送到我的脚本,并为每个输入文件“打印某些东西”。如何知道什么

我发现剧本here

并修改了剧本到这个

awk -v nfiles="10" 'NR==FNR{a[$0]++;next} 
$0 in a {a[$0]++; next} 
{b[$0]++} 
END{ 
    for(i in a){ 
    if(a[i]==nfiles) { 
     print i > "output1" 
    } 
    else if(a[i]==1) { 
     print i > "output3" 
    } 
    } 
    for(i in b){ 
    if(b[i]==nfiles-1) { 
     print i > "output2" 
    } 
    } 
}' "[email protected]" 

是什么问题,我在自nfiles="10"写应该是文本参数的任意号码?

而且我挺不理解这个脚本,它仅执行本节

else if(a[i]==1) { 
     print i > "output3" 
    } 

只打印出从FILE1.TXT的信息。为什么它不执行其他操作?如果我想将所有文件的第3行($3)中的所有内容都打印到output3? 感谢=)

回答

1

如果你要打印的第三列的每个文件的$三成单个输出文件, 你可以使用这样的:如果你要打印的第三行

awk '{ print $3 }' file1 [file2 .. filen] > output3 

每个文件:

awk 'FNR == 3' file1 [file2 .. filen] > output3 

你可以,当然,使用水珠来匹配您的文件:

awk '{ print $3 }' common_pattern* > output3 
0

而不是通过nfiles=10作为第一个操作添加到您的awk脚本。

FNR==1 {nfiles++}