2011-06-30 8 views
-1

私はawkを使っていて、スクリプトに任意の数のテキストファイル(引数)を入れて、それぞれの入力ファイル "print something"に対して送信したいと思っています。どのように知っているか

私は、スクリプトhere

発見し、テキスト任意の数の引数であるはず私はその以来nfiles="10"に何を書くのです。この

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]" 

問題にスクリプトを変更しましたか?

また、私は非常にこのスクリプトを理解していない、それだけで、このセクション

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

そしてだけFILE1.TXTからの情報をプリントアウトを実行します。なぜ残りの部分を実行しないのですか?すべてのファイルから行3($3)のすべてをoutput3に印刷したいのですが?あなたがの3行目を印刷したい場合は

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

: 感謝=)

答えて

1

あなたは単一の出力ファイルに3列目のすべてのファイルの$ 3印刷したい場合は、 あなたはこのようなものを使用することができますすべてのファイル:あなたは、もちろん、あなたのファイルを一致させるためにグロブを使用することができます

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

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

nfiles=10の代わりに、これを最初のアクションとしてawkスクリプトに追加します。ファイルの数を計算するために

FNR==1 {nfiles++} 
0

使用すると、コメントを追加しました:

awk 'BEGIN {nfiles = ARGC-1} 
... 
}' "[email protected]" 
関連する問題