ファイルに次の内容が含まれるようにsed
ファイルを2つに分割するにはどうすればよいですか?
eric shwartz
david snyder
ここで、項目間の4つのスペースは実際には2つのファイルのタブです。たとえば、次のようになります。
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