하나의 명령을 사용하여 두 명령의 출력을 하나로 결합하려면 어떻게 해야 합니까?
명령 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 필드)
관련된 파일 없이 명령과 바꾸기가 화면에 나타날 것으로 예상합니다.
예상되는 결과:
COLUMN3 COLUMN4 NAME1
kkk www eee
kkk ppp aaa
kkk qqq nnn
lll ttt ccc
kkk rrr ccc
매우 감사합니다.
**
**편집: 테스트를 위해 각 명령의 결과가 포함된 2개의 멍청한 스크립트를 추가했습니다.
command1.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
command2.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
첫 번째 입력 스트림의 세 번째 필드 또는 두 번째 입력 스트림의 두 번째 필드에 공백이 있는지 여부에 관계없이 매핑이 작동하고 출력이 입력과 동일한 간격을 유지하도록 작성했습니다. 공백이나 탭 또는 필드가 고정 너비인지 여부. 공백을 포함할 수 없는 유일한 필드는 입력 1의 필드 1과 2, 입력 2의 필드 3입니다.