美好的一天,
我想知道如果特定列的模式匹配,如何将矩阵拆分成文件。
模式:当在第二列找到零时,拆分。
到目前为止,我已经完成了:
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
提前感谢任何线索
答案 0 :(得分:1)
-FS"\t"
并没有按照您的想法行事。 awk将-F 's\t'
设置为FS
为s<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
,以便下一行转到新文件。