我有一个包含几千行数据的文件,每行代码如下:a:b:c:d
例如:
0.0:2000.00:2000.04:2000.02
我希望将所有内容放在一个文件中,b放在第二个文件中等等。
答案 0 :(得分:6)
一种方式。输出文件将命名为 fileX ,每个列号的 X 。
假设 infile 包含内容:
0.0:2000.00:2000.04:2001.02
0.1:2002.00:2000.05:2003.02
0.2:2003.00:2002.04:2004.02
0.3:2001.00:2000.05:2000.03
0.3:2001.00:2000.04:2001.02
0.2:2001.00:2002.04:2000.02
执行此awk
命令:
awk '
BEGIN {
FS = ":";
}
{
for ( i = 1; i <= NF; i++ ) {
print $i > "file" i;
}
}
' infile
检查输出文件:
head file[1234]
以下结果:
==> file1 <==
0.0
0.1
0.2
0.3
0.3
0.2
==> file2 <==
2000.00
2002.00
2003.00
2001.00
2001.00
2001.00
==> file3 <==
2000.04
2000.05
2002.04
2000.05
2000.04
2002.04
==> file4 <==
2001.02
2003.02
2004.02
2000.03
2001.02
2000.02
答案 1 :(得分:4)
您应该使用-F:
标记将字段分隔符设置为:
。
您应该使用print
和> file
来获取所需文件的输出。
awk -F: '{ for (i = 1; i <= NF; i++) { file = "file." i; print $i > file; } }' input
(Mac OS X 10.7.4上的awk
不允许将表达式作为文件名; gawk
可以。显示的解决方案适用于两者。)
[回答家庭作业,以反击(现已取消 - 谢谢你)向下投票,这是IMNSHO无偿错误!]
答案 2 :(得分:0)
怎么样:
cat filename|cut -d ':' -f1 > a.txt
然后你可以为第二个字段写-f2并将其放在b.txt。
中