파일 병합을 위한 awk 명령

파일 병합을 위한 awk 명령

이 두 파일을 일치하는 값으로 병합하려면 awk 명령이 필요합니다.

Color:Green
Color:Yellow 
Color:Orange

그리고

Green:Yes
Orange:Yes

그리고 얻다

 Color:Green:Yes
 Color:Orange:Yes

답변1

사용 및 위치 join:sortbash

$ 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 2make를 통해 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

관련 정보