답변:
이 시도:
$ 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 file1 file2
에서 선택한 필드를 사용한 다음 인쇄 할 수 있습니다 awk
.
file2
메모리에 저장 되며 파일이 클 경우 금지 될 수 있습니다. 메모리 오버 헤드 없이이 작업을 수행하는 더 간단한 방법이 있습니다 (내 답변 참조).
이를위한 전용 도구가 있습니다 : 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
일치하려는 열이 정렬되어 있으면 작업을 수행합니다.
pr -m -t -s\ File1.txt File2.txt | gawk '{print $1,$2,$3, $6}' > File3.txt