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 是一个以数字作为参数的标志,这个数字是一个列数。
我认为它不会比该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)