將一個由製表符分隔的行分割成兩個文件

將一個由製表符分隔的行分割成兩個文件

我怎麼能使用類似的東西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

相關內容