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