2개의 파일이 있고 예를 ABC.txt
들어 PQR.txt
아래와 같은 데이터가 있다고 가정해 보겠습니다.
ABC.txt:
ABC DEF
PQR.txt:
PQR XYZ
grep
두 파일 중 열 1을 세 번째 텍스트 파일에 쓰고 싶습니다 . 어떻게 하나요?
내 예상 출력은 (output.txt)입니다.
ABC PQR
답변1
이를 수행하는 방법에는 여러 가지가 있습니다.
사용
paste
및cut
:$ paste -d ' ' <(cut -d' ' -f 1 ABC.txt ) <(cut -d' ' -f 1 PQR.txt ) > output.txt ABC PQR
시스템이 프로세스 대체를 지원하지 않는 경우 다음 명령을 사용하십시오.
$ cut -d' ' -f 1 ABC.txt > /tmp/aa; cut -d' ' -f 1 PQR.txt > /tmp/bb; paste -d ' ' /tmp/aa /tmp/bb
사용하세요
awk
(@Costas 덕분에):awk 'FNR==NR{a[FNR]=$1; next}{print a[FNR],$1}' ABC.txt PQR.txt > output.txt
특수 변수는
FNR
현재 입력 파일의 줄 번호와NR
파일의 출처에 관계없이 일반적으로 입력의 줄 번호입니다. 이 둘은 첫 번째 입력 파일을 읽을 때만 동일합니다. 따라서 첫 번째 파일의 첫 번째 필드는 배열a
(a[FNR]=$1
)에 저장됩니다. 배열의 키는 줄 번호이고 값은 첫 번째 필드입니다. 그런 다음 두 번째 파일에 도달하면a[NR]
해당 줄 번호( )와 현재 줄의 첫 번째 필드에 해당하는 값을 인쇄합니다.
답변2
nl
다음을 사용하여 행 수를 계산할 수 있습니다 .join
join -o 1.2,2.2 <(nl ABC.txt) <(nl PQR.txt) > OUT.file
또는 통해cat -n
join -o 1.2,2.2 <(cat -n ABC.txt) <(cat -n PQR.txt) > OUT.file
좋다for/while 루프에 입력된 두 파일을 구문 분석합니다.그냥 사용할 수 있습니다bash builtins
while read -u 3 a b && read -u 4 c d
do
echo "$a $c"
done 3< ABC.txt 4< PQR.txt >OUT.txt
답변3
입력 파일의 필드가 공백으로 구분되어 있다고 가정하면 다음과 같이 작성합니다.
paste -d " " ABC.txt PQR.txt | cut -d " " -f 1,3 > Output.txt
쉘이 bash/ksh/zsh(?)라고 가정하고 임의의 공백과 파일당 2개 이상의 열을 처리합니다.
paste -d " " <(awk '{print $1}' ABC.txt) <(awk '{print $1}' PQR.txt) > Output.txt