두 개의 공백으로 구분된 목록을 나란히 정렬합니다. [중복]

두 개의 공백으로 구분된 목록을 나란히 정렬합니다. [중복]

foo.txt와 bar.txt라는 두 개의 파일을 만들었습니다.

foo.txt는 다음과 같습니다.foo1 foo2 foo3 foo4 foo5 foo6 foo7 foo8 foo9 foo10

및 bar.txt:bar1 bar2 bar3 bar4 bar5 bar6 bar7 bar8 bar9 bar10

그러면 어떻게 이 두 텍스트 파일을 foobar.txt라는 텍스트 파일로 출력하고 다음과 같이 정렬할 수 있습니까?

foo1 bar1
foo2 bar2
foo3 bar3
...

관리 콘텐츠: 사람들이 병합을 제안했기 때문에 중복된 질문이라는 경고를 받았습니다.

foo1
foo2
foo3
foo4
foo5 

그리고

bar1
bar2
bar3
bar4
bar5

같은 과정입니다. 이 작업을 수행해야 하는 경우 여기에서 새 줄 조합에 대한 문제 해결 텍스트를 찾을 수 있습니다.사용자 2120893의 질문에 대한 링크

공백 항목이 있는 파일을 편집하는 명령을 사용하려면 awk를 사용하여 표시된 아래 답변을 사용해야 합니다. "두 목록을 결합하는 방법" 및 "간격 목록을 새 행 목록으로 분리하는 방법"에 대한 질문이 계속 표시되지만 awk 함수를 통해 두 간격 목록을 분리하기 위해 awk의 단일 행 명령을 사용하지 않은 다음 awk 사양을 통해 결합합니다. 일어서세요. 마침내 내 질문에 답해 준 Sergiy Kolodyazhny에게 많은 감사를 드립니다(단 하나의 명령만 사용하여 답변을 드렸습니다!). 나는 이 질문에 대한 답을 찾고 있었고 이상한 마법사가 우리에게 그 비결을 보여주기 위해 개입했습니다. 또 다른 훌륭한 답변을 주신 John1024에게 감사드립니다.

답변1

다음 두 파일부터 시작해 보겠습니다.

$ cat foo.txt 
foo1 foo2 foo3 foo4 foo5 foo6 foo7 foo8 foo9 foo10
$ cat bar.txt 
bar1 bar2 bar3 bar4 bar5 bar6 bar7 bar8 bar9 bar10

함께 넣어보세요:

$ paste <(tr ' ' '\n' <foo.txt) <(tr ' ' '\n' <bar.txt)
foo1    bar1
foo2    bar2
foo3    bar3
foo4    bar4
foo5    bar5
foo6    bar6
foo7    bar7
foo8    bar8
foo9    bar9
foo10   bar10

또는:

$ awk -v RS='[[:space:]]+' 'FNR==NR{a[NR]=$0; next} {print a[FNR],$0}' foo.txt bar.txt
foo1 bar1
foo2 bar2
foo3 bar3
foo4 bar4
foo5 bar5
foo6 bar6
foo7 bar7
foo8 bar8
foo9 bar9
foo10 bar10

답변2

기반히르시의 답변도착하다이 비슷한 질문, bash를 사용하면 할 수 있습니다

paste <(tr ' ' '\n' < foo.txt) <(tr ' ' '\n' < bar.txt)

프로세스 대체( <(…))를 사용하여 파일의 공백을 줄 바꿈으로 변환합니다.

답변3

이미 게시된 조옮김 및 결합 방법에 대한 대안으로 다음은 결합 및 조옮김 방법입니다.

$ cat foo.txt bar.txt | rs -T
foo1   bar1
foo2   bar2
foo3   bar3
foo4   bar4
foo5   bar5
foo6   bar6
foo7   bar7
foo8   bar8
foo9   bar9
foo10  bar10

답변4

이는 다음을 통해 달성할 수 있습니다 awk.

$ awk 'NR==FNR{split($0,a);}NR!=FNR{for(i=1;i<=NF;i++) print a[i],$i}' foo.txt bar.txt
foo1 bar1
foo2 bar2
foo3 bar3
foo4 bar4
foo5 bar5
foo6 bar6
foo7 bar7
foo8 bar8
foo9 bar9
foo10 bar10

관련 정보