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