特定の列を他のファイルと一致させる

特定の列を他のファイルと一致させる

fileAとfileBの下に2つのファイルがあります。列2(ファイルA)の最初の3桁は、列1(ファイルB)と一致します。列1(ファイルA)は63と等しくなければなりません。

ファイルA

 63,918234
 64,918093
 63,920983

文書B

 918,XXX
 920,YYY

これまで私のコードはfileAの行だけを印刷しました。

 awk -F~ 'NR==FNR{a[$1]=$1;next}{n=substr($2,1,3); sub(/^0+/, "", n); for(i in a)if(n~"^"a[i] && $1 ~"63")print $0}' fileB fileA

私の予想結果は

63,918234,XXX
63,920983,YYY

答え1

awkデフォルト以外のフィールド区切り文字を使用しても先行スペースは削除されないため、混乱する可能性があります。おそらく最も簡単な方法は、フィールドに番号を付けるようにすることです。

$ awk -F, 'NR==FNR {a[$1+0]=$2;next} $1+0==63 {print $0","a[substr($2,1,3)+0]}' fileB fileA
 63,918234,XXX
 63,920983,YYY

関連情報