2016-12-16 85 views
-1

第5列和第17列中的字段合并在一起,我想拆分合并的字段并将其放入单独的字段中。 我的数据是这样的我想分裂由tab使用awk窗口分隔合并的字段?

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

,但我想看到这样

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

第5列和第17列?你可能意味着字符5和17. – fedorqui

回答

0
更好

使用sed通过字符分割:

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

这抓住给定的字符并将它们打印回到他们之间的一个标签。

+0

但我使用awk。我期待着使用awk – Alula

+2

获得解决方案,然后开始发布您的尝试。而且,这个sed代码很容易翻译成awk。 – fedorqui

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替代。

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这个结果总是为真,awk打印输入行为默认行为。

+0

它的工作原理。非常感谢你!! – Alula

+0

@Alula欢迎您:) – nu11p01n73R

+0

嗨脚本很好地工作,但对我的一些领域扭曲。如何在分割字段后避免扭曲的字段?是否有可能修复该领域?谢谢 – Alula

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与后者大致相同。