将一个由制表符分隔的行分割成两个文件

将一个由制表符分隔的行分割成两个文件

我怎样才能使用类似的东西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

相关内容