탭으로 구분된 줄을 두 개의 파일로 분할

탭으로 구분된 줄을 두 개의 파일로 분할

파일에 다음과 같은 내용 이 포함되도록 sed파일을 두 개로 분할 하려면 어떻게 해야 합니까?

eric    shwartz
david    snyder

여기서 항목 사이의 4개 공백은 실제로 두 파일에 대한 탭입니다. 예를 들면 다음과 같습니다.

file1:

eric
david

file2:

shwartz
snyder

따라서 각 탭 행 뒤의 모든 내용을 다른 파일에 넣습니다.

답변1

해결책은 다음과 같습니다.

awk '{ print $1 > "file1"; print $2 > "file2"}' file 

답변2

꼭 스크립트여야 하나요? 그렇지 않은 경우 다음을 수행할 수 있습니다.

cut -f 1 file > file1
cut -f 2 file > file2

cut열을 선택합니다(기본적으로 탭이 구분되어 있음). -f는 열 번호인 숫자를 인수로 받아들이는 플래그입니다.

답변3

내 생각엔 그게 더 나은 것 같지는 않아awk방법,다음은 여러 열에 대해 작동하고 각 열을 자체 파일에 저장하는 Perl 솔루션입니다.

perl -ane 'unless($handles[0]){
            for(1..$#F+1){
                open(my $fh, ">","file$_"); 
                $handles[$_-1] = $fh
            }
           } 
           for my $i (0..$#F){
                print { $handles[$i] } "$F[$i]\n"
           }' file 

다음과 같은 입력 파일이 제공됩니다.

$ cat file
foo bar baz bad
foo bar baz bad
foo bar baz bad
foo bar baz bad
foo bar baz bad
foo bar baz bad

위 스크립트는 각 파일 file1file4관련 열을 포함하는 파일을 생성합니다 .


물론 에서도 동일한 작업을 awk훨씬 더 간단하고 우아하게 수행할 수 있지만 그게 무슨 재미가 있겠습니까?

awk '{for(i=1;i<=NF;i++){print $i > "file"i}}' file 

답변4

moreutils(많은 배포 저장소에서 사용 가능 또는http://joeyh.name/code/moreutils/) 여기에 도움이 되는 몇 가지 편리한 유틸리티가 있습니다.

pee 'cut -f1 >file1' 'cut -f2 >file2' < file

관련 정보