awk를 사용하여 두 개의 개별 파일에서 선택적 열을 병합하는 새 파일을 만드는 방법은 무엇입니까? BOTH 파일의 요소 순서를 망치지 않고.
예 : 파일 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
답변
이 시도:
$ 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
답변
이를위한 전용 도구가 있습니다 : 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
일치하려는 열이 정렬되어 있으면 작업을 수행합니다.