2016-05-19 14 views
0

AWKの新機能です。AWK - 3 forループのforループが望ましくない結果

FirstName,LastName,Email,ID,Number,IDToBeMatched 
John,Smith,[email protected],js30,4,kt78 
George,Haynes,[email protected],gh67,3,re201 
Mary,Dewar,[email protected],md009,4,js30 
Kevin,Pan,[email protected],kp41,2,md009 
,,,,,ti10 
,,,,,qwe909 
,,,,,md009 
,,,,,kor28 
,,,,,gh67 

アイデアは、ヘッダ以下のいずれかのフィールドはIDがIDToBeMatched以下のフィールドのいずれかと一致するかどうかを確認することで、全体のレコードを印刷するための一致がある場合はために:私は、次の内容のファイルを持っています最後のフィールド(つまり、IDToBeMatched)。これは、試合だけ印刷し、これまで

awk 'BEGIN{ 
     FS=OFS=",";SUBSEP=","; 
} 

{ 
     # all[$1,$2,$3,$4,$5] 
     a[$4]++; 
     b[$6]++; 
} 

END{ #for(k in all){ 
    for(i in a){ 
     for(j in b){ 
      if(i==j){ 
       print i #k 
        } 
        }  
       } 
    #} 
}' inputfile 

FirstName,LastName,Email,ID,Number 
John,Smith,[email protected],js30,4 
George,Haynes,[email protected],gh67,3 
Mary,Dewar,[email protected],md009,4 

私のコードを:だから、私の最終的な出力は次のようになります。しかし、上記のスクリプトの行のコメントを外して別のループを導入しようとすると、一致するフィールドの行全体が表示されてしまいます。私は理由を理解していますが、解決策を見つけることができません。私はnextのステートメントを導入することを考えましたが、ENDでは許可されていません。私のAWKはGAWKにデフォルト設定されていますので、私は(G)AWKソリューションだけを好みます。

ありがとうございます。

それはファイルは、それが中に貼り付けたとして、必ずしも同数のレコードを持っていないID「プール」から貼り付け/コピーされたため、最後のフィールドが複数のレコードを持っている。

+0

あなたはあなたを示すことができましたスペースを入れずにカンマを削除しないでファイルを作成しますか?より明確にするために、最後の5行には1つのフィールドしかないのはなぜですか?他のものは、実際には各行の最後にカンマがあり、ヘッダが実際に存在していますか? –

+0

@CasimiretHippolyte私の質問が更新されました。また、ヘッダーの最後にコンマはありません。 – Yiannis

+0

この場合、ID「プール」をコピー/ペーストしないで、2つのファイルをawk(それは簡単です)で処理してください: 'awk ' NR == FNR {...;次}} FNR> 1 {...} 'idpool inputfile' –

答えて

0
$ awk -F, 'NR==FNR{a[$6];next} (FNR==1)||($4 in a){sub(/,[^,]+$/,"");print}' file file 
FirstName,LastName,Email,ID,Number 
John,Smith,[email protected],js30,4 
George,Haynes,[email protected],gh67,3 
Mary,Dewar,[email protected],md009,4 
+1

多くのありがとう@エドモートン。それは魅力のように働いた。 AWKの新機能は、どのサブ(/、[^、] + $ /、 "")が何をしているのか尋ねるのは大変ですか?前もって感謝します。 – Yiannis

+0

ようこそ。 'sed -r 's /、[^、] + $ //''のように、行末の最後のカンマから行末までのすべてを削除します。 Arnold Robbinsの「Effective Awk Programming」第4版をお勧めします。 –

+1

説明と提案のための多くの感謝@edmorton – Yiannis