
大きなcsvファイルと小さなcsvファイルの間の3つの列を一致させて出力ファイルに書き込みます。ここには役に立つ質問がたくさんありますが、現在経験している特定の問題に対する回答はありません。列項目が短い場合は一致が見つかりません。
私のソリューションは次のソリューションに基づいています。異なるファイルの2つの列を比較し、一致した場合に印刷します。
一致する列は、small1 == Large120002、small2 == Large120003、small3 == Large120004でなければなりません。
私は何をしていますか?
awk -F, 'NR==FNR{c[$1,$2,$3]++;next};c[$120002,$120003,$120004] > 0' small.csv large.csv > output.csv
この種の作品です。これには、Large120002が9文字未満の長さのintの行は含まれません。 (これまで、Large120002の値は7〜9文字の長さでした。)
以前この問題が発生したことがありますか?可能であれば、awkソリューションに固執したいと思います。
答え1
変換の問題であることがわかったので、awkが両方とも同じように処理することを確認するために列に0を追加しました。
の助けを借りて:https://stackoverflow.com/questions/5808971/casting-to-int-in-awk
いよいよ成功しました。
awk -F, 'NR==FNR{c[$1+0,$2,$3]++;next};c[$120002+0,$120003,$120004] > 0' small.csv large.csv > output.csv