UNIXのvlookup関数、列が変更されました

UNIXのvlookup関数、列が変更されました

file2 file1.txtの値ではなく、変数に保存された値を送信することは可能ですか?上記のクエリで変数を渡す方法を教えてください。クエリに変数を渡そうとしましたが、変数は値を単一の行として保存し、目的の出力を取得できませんでした。

ご回答ありがとうございます。上記のfile1とfile2の値がコマンド出力であり、それを変数に格納していますが、このクエリでこれらの変数を渡す方法を知りたいです。これがはっきりしていることを願っています。

[p001 ~]$ cat file1 
30042020
29042020
28042020
27042020
26042020
25042020
24042020

[p001 ~]$ cat file2 
303 30042020
259 29042020
288 28042020
402 27042020
75  26042020
207 25042020

[p9147724_local@dotenprlpbas001 ~]$ var1=$(cat file1) 
[p9147724_local@dotenprlpbas001 ~]$ var2=$(cat file2) 

[p001 ~]$ awk 'NR == FNR{ a[$2] = $1; next } { print $1, a[$1]+0 }' "$var2" "$var1" 
awk: fatal: cannot open file `303 30042020 259 29042020 288 28042020 402 27042020 75 26042020 207 25042020' for reading (No such file or directory) 

予想出力:

30042020 303
29042020 259
28042020 288
27042020 402
26042020 75
25042020 207
24042020 0 

ベストアンサー1

a[$1] = $2次のように変更するだけですa[$2] = $1

awk 'NR == FNR{ a[$2] = $1; next }; { print $1, $1 in a?a[$1]: "0" }' file2 file1

ただし、これは次のように短縮できます。

awk 'NR == FNR{ a[$2] = $1; next } { print $1, a[$1]+0 }' file2 file1

修正する:コマンド出力から入力を読み込みます。CommandX&コマンドY

awk 'NR == FNR{ a[$2] = $1; next } { print $1, a[$1]+0 }' <(cmdY) <(cmdX)

もし使用中のシェルはプロセスの交換をサポートしていません:次のことができます。

( cmdY | ( cmdX | (
awk '
    NR == FNR{ a[$2] = $1; next } { print $1, a[$1]+0 }
' /dev/fd/3 /dev/fd/4 ) 4<&0 ) 3<&0 )

おすすめ記事