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