![다른 파일에서 동일한 열이 있는 줄을 어떻게 파악하고 특정 열을 인쇄하고 원본 파일에 추가할 수 있습니까? [폐쇄]](https://linux55.com/image/139972/%EB%8B%A4%EB%A5%B8%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EB%8F%99%EC%9D%BC%ED%95%9C%20%EC%97%B4%EC%9D%B4%20%EC%9E%88%EB%8A%94%20%EC%A4%84%EC%9D%84%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%8C%8C%EC%95%85%ED%95%98%EA%B3%A0%20%ED%8A%B9%EC%A0%95%20%EC%97%B4%EC%9D%84%20%EC%9D%B8%EC%87%84%ED%95%98%EA%B3%A0%20%EC%9B%90%EB%B3%B8%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EC%B6%94%EA%B0%80%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
다음은 우리가 가지고 있는 텍스트 파일입니다.
파일 1.txt
A B C D
4 9
5 8
파일 2.txt:
H I J K L M N O P Q R
1 2 3 5 8 9 5 3 3 2 4
4 7 8 9 5 6 8 9 0 8 7
7 8 0 7 4 7 7 9 0 6 7
2 7 9 5 7 9 0 7 6 5 4
file1.txt의 A 열이 file2.txt의 L 열과 일치하는 경우 file2.txt에서 두 개의 열(H 및 N)을 추출하고 표시할 출력 텍스트 파일은 다음과 같아야 합니다.
출력.txt
A B C D
4 9 7 7
5 8 4 8
어떻게 해야 하나요?
답변1
grep을 사용하면 불가능하지만 awk를 사용하면 가능합니다.
$ awk 'NR==1 {print $0;next} # Print header
NR==FNR {a[$1]=$2;next} # collect data from file1.txt
{ if($5 in a) # If column L match
{ print($5,a[$5],$1,$7) } # print columns (H and N)
}
' file1.txt file2.txt
한 줄로:
$ awk 'NR==1{print $0;next} NR==FNR{a[$1]=$2;next} {if($5 in a){print($5,a[$5],$1,$7)}}' file1.txt file2.txt
A B C D
5 8 4 8
4 9 7 7
순서는 필드에 나타나는 순서와 동일합니다 file2.txt
.
정렬이 필요한 경우 정렬 단계를 추가하세요.
답변2
단계별 방법으로 설명하겠습니다
파일 정렬 1
sort file1.txt > file1.sorted.txt
file2에서 흥미로운 부분을 가져와 정렬합니다.
awk '{print $5,$1,$7}' file2.txt | sort > file2_of_interest.txt
키를 기준으로 두 출력을 연결합니다(두 파일의 열 1).
join file1.sorted.txt file2_of_interest.txt -1 1 -2 1
간접 참조를 사용하여 이 세 단계를 결합할 수 있지만 궁극적으로는 최소한 하나의 파일에 대한 구문 분석을 완료해야 합니다. file2.txt의 L 열이 고유하지 않거나 file1.txt의 열 1이 고유하지 않다는 우려도 있습니다. 키를 고유하게 만드는 비즈니스 논리를 넣어 이러한 문제를 해결해야 합니다.