将带有由制表符分隔的行的文件拆分为两个文件

jaw*_*233 5 sed awk text-processing

我怎么能用类似的东西sed把一个文件分成两个这样的文件包含

eric    shwartz
david    snyder
Run Code Online (Sandbox Code Playgroud)

其中条目之间的 4 个空格实际上是两个文件中的制表符,例如:

file1

eric
david
Run Code Online (Sandbox Code Playgroud)

file2

shwartz
snyder
Run Code Online (Sandbox Code Playgroud)

所以它把每一行标签后面的所有东西都放到另一个文件中。

and*_*tsh 16

一个解决方案可能是:

awk '{ print $1 > "file1"; print $2 > "file2"}' file 
Run Code Online (Sandbox Code Playgroud)


Mat*_*ock 13

它必须是一个脚本吗?如果没有,你可以这样做:

cut -f 1 file > file1
cut -f 2 file > file2
Run Code Online (Sandbox Code Playgroud)

cut选择一列(默认由制表符分隔)。-f 是一个以数字作为参数的标志,这个数字是一个列数。

  • 这比接受的答案要好(除了两遍的缺点),因为它只将 TAB 视为分隔符,而 awk 似乎在任何空白处拆分。(当然,这可以解决,但它会变得更加复杂。) (2认同)

ter*_*don 5

我认为它不会比该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 
Run Code Online (Sandbox Code Playgroud)

给定一个这样的输入文件:

$ 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
Run Code Online (Sandbox Code Playgroud)

上面的脚本将file1通过file4每个文件创建包含相关列的文件。


当然,您可以awk在 .

awk '{for(i=1;i<=NF;i++){print $i > "file"i}}' file 
Run Code Online (Sandbox Code Playgroud)