第5列和第17列中的字段合并在一起,我想拆分合并的字段并将其放入单独的字段中。 我的数据是这样的我想分裂由tab使用awk窗口分隔合并的字段?
326502010-12-10 320100807
368902010-12-14 420100716
,但我想看到这样
32650 2010-12-10 3 20100807
36890 2010-12-14 4 20100716
第5列和第17列中的字段合并在一起,我想拆分合并的字段并将其放入单独的字段中。 我的数据是这样的我想分裂由tab使用awk窗口分隔合并的字段?
326502010-12-10 320100807
368902010-12-14 420100716
,但我想看到这样
32650 2010-12-10 3 20100807
36890 2010-12-14 4 20100716
您还可以使用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
替代。
使用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
打印输入行为默认行为。
它的工作原理。非常感谢你!! – Alula
@Alula欢迎您:) – nu11p01n73R
嗨脚本很好地工作,但对我的一些领域扭曲。如何在分割字段后避免扭曲的字段?是否有可能修复该领域?谢谢 – Alula
在前述情况下的日期数的长度变化,使用:
$ awk '{sub(/....-..-../,"\t&",$1); sub(/^./,"&\t",$2)} 1' file
32650 2010-12-10 3 20100807
36890 2010-12-14 4 20100716
sub
用制表(\t
)和匹配部分(&
),即取代的日期部分。日期。关于$2
与后者大致相同。
第5列和第17列?你可能意味着字符5和17. – fedorqui