あるファイルのフィールドが別のファイルにあることを確認し、最初のファイルの特定の列を更新します。

あるファイルのフィールドが別のファイルにあることを確認し、最初のファイルの特定の列を更新します。

次の2つのファイルがあります。

a.txt(タブ区切り、列が3つ、行が多すぎます):

 city   plate   region
 istanbul   36  marmara
 trabzon    61  karadeniz

b.txt(カンマ区切り、4列、多すぎる行):

name,city,age,nationality
mehmet,trabzon,,
murat,istanbul,,
john,london,,

私が望むのは、city2番目の列(フィールド)が(最初の列 - )b.txtにあることを確認し、ファイルが存在する場合はファイルを更新し、4番目の列()を「トルコ語」に設定することです。したがって、予想される結果は次のとおりです。a.txtcitya.txtb.txtnationality

name,city,age,nationality
mehmet,trabzon,,turkish
murat,istanbul,,turkish
john,london,,

次のコマンドを試しましたが、目的の出力が生成されませんでした。

nawk 'BEGIN { FS = "\t" } FNR == NR {x[$1] = $1; next;} {FS=OFS=","} FNR>1{if ($2 in x) {($4 = "turkish")} } 1' a.txt b.txt
name,city,age,nationality
mehmet,trabzon,,
murat,istanbul,,
john,london,,

私のコマンドでエラーを見つける必要があります。

ベストアンサー1

スクリプトは正常に実行されます。私の考えでは、最初のファイルにタブの代わりに区切り文字でスペースがあるようです。

役に立たないものを取り除きBEGIN { FS = "\t" }、それが真であることを確認してください。

おすすめ記事