タブ区切りの行を2つのファイルに分割

タブ区切りの行を2つのファイルに分割

ファイルに次の内容が含まれるように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

上記のスクリプトは、各ファイル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

関連情報