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

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

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

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


물론 에서 똑같은 작업을 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

관련 정보