awk를 사용하여 두 개의 개별 파일에서 선택 열을 병합하는 새 파일을 만드는 방법은 무엇입니까? 두 파일의 요소 순서를 혼동하지 않습니다.
예: 파일 3에는 파일 1의 열 1, 2, 3과 파일 2의 열 4가 포함될 수 있습니다.
File 1
A 23 8 T
A 63 9 9
B 45 3 J
File 2
A 0
A 6
B 5
File 3
A 23 8 0
A 63 9 6
B 45 3 5
답변1
이를 수행하는 전용 도구가 있습니다.paste
. 첫 번째 파일의 각 전체 행을 두 번째 파일의 해당 행과 결합합니다. 이전이나 이후에 원하지 않는 열을 제거할 수 있습니다. 예를 들어 열이 탭으로 구분되어 있다고 가정해 보겠습니다.
paste file1.txt file2.txt | cut -f 1,2,3,6
이는 ksh/bash/zsh 프로세스에 의한 대체에 의존하는 파일을 사전 필터링하는 방법입니다.
paste <(<file1.txt sed 's/[[:space:]][[:space:]]*[^[:space:]]*$//') \
<(<file1.txt sed 's/^[^[:space:]]*[[:space:]][[:space:]]*//')
awk는 주로 한 번에 하나의 파일을 처리하는 데 적합하지만 이를 호출하여 getline
다른 파일을 병렬로 읽을 수도 있습니다.
awk '
BEGIN {file2=ARGV[2]; ARGV[2]="";}
{$0 = $0 ORS getline(); print $1, $2, $3, $6;}
' file1.txt file2.txt
지금까지 나는 파일 1의 라인 1을 파일 2의 라인 1과 일치시키고, 파일 1의 라인 2를 파일 2의 라인 2와 일치시키고 싶다고 가정했습니다. 열의 내용을 일치시키려는 경우 이는 완전히 다른 것입니다.join
일치하는 열이 정렬되어 있으면 이 작업이 수행됩니다.
답변2
이 시도:
$ awk 'FNR==NR{a[FNR]=$2;next};{$NF=a[FNR]};1' file2 file1
A 23 8 0
A 63 9 6
B 45 3 5