列の値の長さが異なる場合、異なるcsvファイルの一致する列は機能しません。

列の値の長さが異なる場合、異なるcsvファイルの一致する列は機能しません。

大きな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

おすすめ記事