t1.txt
와 이라는 두 개의 파일이 있습니다 t2.txt
. 내용은 다음과 같습니다.
t1.txt
a
b
c
t2.txt
ab
bc
cd
이제 t3.txt가 다음과 같이 보이도록 이 두 파일을 한 줄씩 t3.txt에 병합하려고 합니다.
t3.txt
aab
bbc
ccd
쉘 스크립트를 사용하여 출력을 얻는 데 도움을 주십시오.
답변1
붙여넣고 sed
더 효율적인 방법이 있지만 여기에 paste
및 를 사용하는 빠르고 더러운 방법이 있습니다 sed
.
$ paste -d":" t1.txt t2.txt | sed 's/://g'
aab
bbc
ccd
두 파일은 아래와 같이 위에서 연결됩니다.
a:ab
b:bc
c:cd
그리고 sed
삭제되었습니다 :
.
그냥 붙여넣기
사용을 포기할 수 있습니다. 파일을 결합할 때 sed
구분 기호로 아무 것도 사용하지 말라고 말하는 것은 약간 중복됩니다 .paste
$ paste -d "" t1.txt t2.txt
aab
bbc
ccd
앗
awk
다음 방법을 사용하여 이를 수행할 수도 있습니다 .
$ awk 'NR==FNR{a[FNR]=$0;next} {print a[FNR] $0}' t1.txt t2.txt
aab
bbc
ccd
이것은 첫 번째 파일을 반복하여 t1.txt
배열에 저장합니다 a[FNR]
. FNR
파일에 있는 각 줄의 줄 번호를 기반으로 하는 배열에 대한 인덱스 입니다 t1.txt
. 그런 다음 두 번째 파일을 반복 t2.txt
하고 두 번째 파일에 해당하는 첫 번째 파일의 줄을 인쇄합니다.
연결(&A)&nl
이 방법은 약간 복잡하지만 효과가 있고 사용 시 무거운 물건을 들어올리는 awk
일이 덜 복잡해집니다.
$ join <(nl t1.txt) <(nl t2.txt)|awk '{print $2 $3}'
aab
bbc
ccd
다음 nl ...
명령은 줄 번호가 포함된 테스트 파일 버전을 생성합니다.
$ nl t1.txt
1 a
2 b
3 c
그런 다음 명령 join
은 해당 줄 번호를 두 파일에 공통된 데이터 조각으로 사용하여 결합할 수 있습니다.
$ join <(nl t1.txt) <(nl t2.txt)
1 a ab
2 b bc
3 c cd
awk
마지막으로 위의 두 번째 및 세 번째 열을 추출하는 데 사용합니다.
홍보와 awk
거의 사용되지 않는 이 pr
명령은 병합 스위치를 통해 파일을 연결하는 데에도 사용할 수 있습니다 -m
.
$ pr -t -m t1.txt t2.txt | awk '{print $1 $2}'
aab
bbc
ccd
답변2
paste -d '\0' t1.txt t2.txt > t3.txt
아니요, 두 파일 사이에 NUL 문자가 포함되어 있지 않습니다.
예, 표준(POSIX)이고 이식 가능하며 가장 효율적입니다.
답변3
추가 텍스트 처리 도구 없이 BASH 셸에서 실행해 보세요.
exec 3< t1.txt
exec 4< t2.txt
while read l1 <&3 && read l2 <&4; do
echo ${l1}$l2
done > t3.txt