1 つのコマンドを使用して、2 つのコマンドの出力を 1 つにマージするにはどうすればよいですか?
コマンド1の出力:
ID NAME1 COLUMN2
xxx-1 aaa bbb
xxx-2 ccc ddd
xxx-3 eee fff
xxx-4 nnn mmm
コマンド2の出力:
COLUMN3 COLUMN4 ID
kkk www xxx-3
kkk ppp xxx-1
kkk qqq xxx-4
lll ttt xxx-2
kkk rrr xxx-2
注:command1 xxx-2
戻り値ccc
(NAME1 フィールド)
画面上で 1 つのコマンドと置換が実行され、ファイルは関係しないことが予想されます。
期待される結果:
COLUMN3 COLUMN4 NAME1
kkk www eee
kkk ppp aaa
kkk qqq nnn
lll ttt ccc
kkk rrr ccc
どうもありがとう。
**
** 編集済み: テスト用に各コマンドの結果を含む 2 つのダム スクリプトを追加しました。
コマンド1.sh >
#!/bin/sh
if [[ -z "$1" ]]; then
echo 'ID NAME1 COLUMN2
3cc45fe6-gqee-321f-c143-w3d1d278912c aaa bbb bab bab
4a39466b-211d-48e2-a86b-db022c10fe59 ccc ddd ddd daa ddd
adw45fe6-fqxe-261g-k172-a7d1x277112d eee fff fff
f28894d0-cf40-4cff-a19a-a6893f88dd67 nnn mmm mamm mmm'
elif [[ -n "$1" ]]; then
if [[ "$1" == "3cc45fe6-gqee-321f-c143-w3d1d278912c" ]]; then
echo "aaa"
elif [[ "$1" == "4a39466b-211d-48e2-a86b-db022c10fe59" ]]; then
echo "ccc"
elif [[ "$1" == "adw45fe6-fqxe-261g-k172-a7d1x277112d" ]]; then
echo "eee"
elif [[ "$1" == "f28894d0-cf40-4cff-a19a-a6893f88dd67" ]]; then
echo "nnn"
else
echo "Error from server (NotFound)"
fi
fi
コマンド2.sh >
#!/bin/sh
echo 'COLUMN3 COLUMN4 ID
kkk www wwaaw www www adw45fe6-fqxe-261g-k172-a7d1x277112d
kkk pppppppppppp paaapp ppp ppp 3cc45fe6-gqee-321f-c143-w3d1d278912c
kkk qqq qqq qqqqqqqqqqqqqqq f28894d0-cf40-4cff-a19a-a6893f88dd67
lll tttttttttttt ttttttttt ttt ttt 4a39466b-211d-48e2-a86b-db022c10fe59
kkk rrrrrr rrrrrr rrrraarrrrr rrr 4a39466b-211d-48e2-a86b-db022c10fe59'
答え1
awk 'NR==FNR{a[$1]=$2; next} {$3=a[$3]} 1' <(command1) <(command2)
あなたが探しているものかもしれません。
上記を微調整し、追加した 2 つのコマンド スクリプトが生成する出力に基づいて再実行しました。
$ awk '
NR==FNR { map[$1]=$2; next }
{ key=$NF; sub(/[^[:space:]]+[[:space:]]*$/,""); print $0 map[key] }
' <(./command1.sh) <(./command2.sh)
COLUMN3 COLUMN4 NAME1
kkk www wwaaw www www eee
kkk pppppppppppp paaapp ppp ppp aaa
kkk qqq qqq qqqqqqqqqqqqqqq nnn
lll tttttttttttt ttttttttt ttt ttt ccc
kkk rrrrrr rrrrrr rrrraarrrrr rrr ccc
私は、最初の入力ストリームの 3 番目のフィールドまたは 2 番目の入力ストリームの 2 番目のフィールドにスペースがあるかどうか、スペースが空白またはタブであるかどうか、またはフィールドが固定幅であるかどうかに関係なく、マッピングが機能し、出力が入力と同じスペースを保持するように記述しました。スペースを持つことができないフィールドは、入力 1 のフィールド 1 と 2、および入力 2 のフィールド 3 のみです。