我想使用awk for window拆分由tab分隔的合并字段?

时间:2016-12-16 09:03:26

标签: awk

第5列和第17列中的字段合并在一起,我想拆分合并后的字段并放入单独的字段中。 我的数据看起来像这样

326502010-12-10       320100807
368902010-12-14       420100716

但我希望看到这样的

32650       2010-12-10    3   20100807
36890       2010-12-14    4   20100716

4 个答案:

答案 0 :(得分:1)

使用awk

$ awk -vOFS="\t" '{sub(/.{5}/, "&\t", $1); sub(/./, "&\t", $2)}1' file
32650   2010-12-10  3   20100807
36890   2010-12-14  4   20100716
  • sub(/.{5}/, "&\t", $1)在第一个字段中替换前5个字符,然后替换\t

  • sub(/./, "&\t", $2)}代替第二场。

  • 1此评估结果为true,awk将输入行打印为默认操作。

答案 1 :(得分:1)

如果日期之前的数字长度不同,请使用:

$ awk '{sub(/....-..-../,"\t&",$1); sub(/^./,"&\t",$2)} 1' file
32650   2010-12-10 3    20100807
36890   2010-12-14 4    20100716

sub用标签(\t)和匹配的部分(&)替换日期部分。日期。与$2的后一部分大致相同。

答案 2 :(得分:0)

最好使用sed按字符分割:

$ sed -r 's/^(.{5})(.{18})/\1\t\2\t/' file
32650   2010-12-10       3  20100807
36890   2010-12-14       4  20100716

这会捕获给定的字符并将它们打印回来,并在它们之间添加一个标签。

答案 3 :(得分:0)

您也可以使用cut

$ cut --output-delimiter=$'\t' -c 1-5,6-17,18- file
32650   2010-12-10      3   20100807
36890   2010-12-14      4   20100716

使用-c选项,您可以设置一个列表,表示要剪切的行部分。逗号,已替换为设置为标签的--output-delimiter