1

我有一个包含几千行数据的文件,每一行都像:a:b:c:d

例如:

0.0:2000.00:2000.04:2000.02

我想在一个文件中获取所有 a,在第二个文件中获取 b,等等。如何?

4

3 回答 3

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
于 2012-08-12T19:13:20.460 回答
4

查看awk(或gawk)手册。

您应该使用该-F:标志将字段分隔符设置为:.

您应该使用printwith> file将输出获取到您想要的文件。

awk -F: '{ for (i = 1; i <= NF; i++) { file = "file." i; print $i > file; } }' input

awk在 Mac OS X 10.7.4 上不允许使用表达式作为文件名;gawk可以。显示的解决方案适用于两者。)

[为反击(现已取消——谢谢)否决票而给出的家庭作业答案,这是 IMNSHO 无偿错误的!]

于 2012-08-12T19:06:00.673 回答
0

关于什么:

cat filename|cut -d ':' -f1 > a.txt

然后你可以为第二个字段写 -f2 并把它放在 b.txt 中。

于 2012-08-12T19:12:29.637 回答