Bash에서 두 파일을 한 줄씩 병합하는 방법


178

나는 두 개의 텍스트 파일을 가지고 있으며, 각 파일에는 한 줄씩 정보가 들어 있습니다.

file1.txt            file2.txt
----------           ---------
linef11              linef21
linef12              linef22
linef13              linef23
 .                    .
 .                    .
 .                    .

bash 스크립트를 사용하여 이러한 파일을 한 줄씩 병합하고 싶습니다.

fileresult.txt
--------------
linef11     linef21
linef12     linef22
linef13     linef23
 .           .
 .           .
 .           .

Bash에서 어떻게 할 수 있습니까?

답변:


272

당신은 사용할 수 있습니다 paste:

paste file1.txt file2.txt > fileresults.txt

구분 기호를 사용하려면 어떻게 작동합니까?
Teja

8
@SOaddictpaste -d "\n" * > results.txt
Ostap Maliuvanchuk

paste당신이 함께 오버라이드 (override)하지 않는 한 탭 각 열을 분리합니다 -d옵션은 같은 것을 사용할 수 있도록 awk, sed각 행의 형식을 ... 등. 예 : paste file1.txt file2.txt | awk '{printf "%-61s | %s\n", $1,$2}'... 이것은 diff --side-by-side출력을 모방합니다 )
Yzmir Ramirez

좋은 대답입니다. 작업을 위해 만들어진 도구를 사용하십시오!
Tony

4
paste -d ""delimeters, 공간없이 라인을 연결하는 방법
빅토리아 스튜어트

20

여기에 붙여 넣기가 아닌 방법이 있습니다

어 wk

awk 'BEGIN {OFS=" "}{
  getline line < "file2"
  print $0,line
} ' file1

세게 때리다

exec 6<"file2"
while read -r line
do
    read -r f2line <&6
    echo "${line}${f2line}"
done <"file1"
exec 6<&-

11

다음을 시도하십시오.

pr -tmJ a.txt b.txt > c.txt

1
또한 구분 기호를 변경하려면 -s 옵션을 사용하십시오. (+1)
user.friendly

J 옵션은 macOS Mojave에서 작동하지 않지만 명령은 완벽하게 작동합니다. 감사.
Duck

8

검사

man paste

가능 untabify하거나 또는tabs2spaces


Emacs의 Mx replace-string은 탭, 아마도 Vim을 가져 갔을 것이고 다른 텍스트 편집기도 그렇게 할 수 있습니다.

7
-d 옵션을 사용하여 tab 이외의 구분 기호를 지정하십시오.
Pedru
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.