AWK,如果特定列的模式匹配,则拆分文件中的内容

时间:2014-10-03 19:17:49

标签: regex awk

美好的一天,

我想知道如果特定列的模式匹配,如何将矩阵拆分成文件。

模式:当在第二列找到零时,拆分。

到目前为止,我已经完成了:

cat file | awk -FS"\t" '$2==0 {close("result"f);f++}{print $0 > "result"f}'

输入

1   2
2   3
4   0
5   6
7   0

预期输出

File 1
1   2
2   3
4   0

File 2
5   6
7   0

提前感谢任何线索

2 个答案:

答案 0 :(得分:1)

-FS"\t"并没有按照您的想法行事。 awk将-F 's\t'设置为FSs<tab>

您需要-F"\t"-v FS="\t"

您还需要在关闭旧文件之前打印出当前行。

答案 1 :(得分:1)

awk -v n=1 '{print>("file-" n)} $2==0 {n++}' input

说明:

  • 从输入数据中,似乎无需将字段分隔符设置为选项卡。默认情况下,awk会拆分任何空格上的字段,包括选项卡。

  • -v n=1

    输出文件的名称由变量n确定。我们从1开始。

  • {print>("file-" n)}

    这会将当前行打印到名称取决于n的文件。

  • $2==0 {n++}

    如果第二列为零,我们递增n,以便下一行转到新文件。