awkまたはbashはCSVからIDを読み取り、2番目のCSVの行を一致させ、2番目の列の値を変更します。

awkまたはbashはCSVからIDを読み取り、2番目のCSVの行を一致させ、2番目の列の値を変更します。

.csvが2つあります。

items-to-change.txt は一意の ID の単一列のリストです。

218294
222084
197931
198161
197432
201021
214009

items-by-location.txtには一意のIDと場所番号があります(タブで区切られています)

ID  Location
197432  1
201021  2
214009  4
214438  5
214492  1
...

items-to-change.txtのIDと一致するIDの場合、items-by-location.txtの場所フィールドを6に変更し、それに基づいて新しい.csv(例:items-by-location2)を作成する必要があります。 。 。 txt

items-by-location2.txtは次のようになります。

197432  6
201021  6
214009  6
214438  5
214492  1
...

awkは良い解決策ですか? awkに検索パラメータがあることはわかっていますが、awkを使用してitems-to-change.txtを読み取り、IDを取得してから、items-by-location.txtを1行ずつ読み、IDを比較する方法は不明です。最初の列IDが一致し、items-by-location.txtの2番目の列のみが一致します。

誰でも例をあげることができますか?

ベストアンサー1

変更リストを配列に追加してから、基本入力ファイルの処理中に配列を確認するのはうまく機能しますawk

$ awk 'FILENAME=="changeset" { replace[$1] = 1 } FILENAME=="input" {if( $1 in replace ) { $2 = 6 }; print $1,$2}' changeset input
ID Location
197432 6
201021 6
214009 6
214438 5
214492 1

おすすめ記事