![파일 병합을 위한 awk 명령](https://linux55.com/image/123658/%ED%8C%8C%EC%9D%BC%20%EB%B3%91%ED%95%A9%EC%9D%84%20%EC%9C%84%ED%95%9C%20awk%20%EB%AA%85%EB%A0%B9.png)
이 두 파일을 일치하는 값으로 병합하려면 awk 명령이 필요합니다.
Color:Green
Color:Yellow
Color:Orange
그리고
Green:Yes
Orange:Yes
그리고 얻다
Color:Green:Yes
Color:Orange:Yes
답변1
사용 및 위치 join
:sort
bash
$ join -t: -1 2 <( sort -t: -k2 colours.txt ) <( sort selected.txt )
Green:Color:Yes
Orange:Color:Yes
필드를 올바르게 정렬하려면:
$ join -t: -1 2 -o1.1,1.2,2.2 <( sort -t: -k2 colours.txt ) <( sort selected.txt )
Color:Green:Yes
Color:Orange:Yes
join
정렬된 입력 데이터에 대해 관계형 JOIN 작업을 수행합니다. 이 경우 조인 필드는 색상이며, 이는 :
첫 번째 파일에서는 두 번째 구분 필드로, :
두 번째 파일에서는 첫 번째 구분 필드로 표시됩니다.
join -t: -1 2
make를 통해 join
첫 번째 파일의 두 번째 필드를 "조인 키" 필드로 선택하고(첫 번째 필드는 기본 필드임) 이 두 필드 <(...)
( 에서 대체 bash
)로 정렬된 데이터를 제공합니다. 첫 번째는 sort
두 번째 로 구분된 필드(색상) :
에서 첫 번째 파일을 정렬한다는 점에서 "특별"합니다.
위의 두 번째 예에서는 이 -o
플래그를 사용하여 출력에서 보고 싶은 내용과 순서를 명시적으로 지정합니다.
답변2
해결책 은 다음과 같습니다 awk
.
awk -F':' 'NR==FNR{seen[$1]=$2; next}
($2 in seen){print $0":"seen[$2]; next}1' file2 file1
입력하다:
==> file1 <== Color:Green Color:Yellow Color:Pinky Color:Orange ==> file2 <== Green:Yes Orange:Yes Yellow:No
산출:
Color:Green:Yes Color:Yellow:No Color:Pinky Color:Orange:Yes
답변3
file1이 다음과 같다고 가정합니다.
color:green
color:yellow
color:orange
파일 2는
green:yes
orange:yes
나는 이것이 당신이 원하는 것을 생성할 것이라고 생각합니다.
awk -F ':' 'FNR==NR{a[$1]=$2;next}($2 in a){print a[$1]":"a[$2]} file2 file1
산출:
color:green:yes
color:orange:yes