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「プール」から貼り付け/コピーされたため、最後のフィールドが複数のレコードを持っている。
あなたはあなたを示すことができましたスペースを入れずにカンマを削除しないでファイルを作成しますか?より明確にするために、最後の5行には1つのフィールドしかないのはなぜですか?他のものは、実際には各行の最後にカンマがあり、ヘッダが実際に存在していますか? –
@CasimiretHippolyte私の質問が更新されました。また、ヘッダーの最後にコンマはありません。 – Yiannis
この場合、ID「プール」をコピー/ペーストしないで、2つのファイルをawk(それは簡単です)で処理してください: 'awk ' NR == FNR {...;次}} FNR> 1 {...} 'idpool inputfile' –