파일에 다음과 같은 내용 이 포함되도록 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