第5列和第17列中的字段合并在一起,我想拆分合并后的字段并放入单独的字段中。 我的数据看起来像这样
326502010-12-10 320100807
368902010-12-14 420100716
但我希望看到这样的
32650 2010-12-10 3 20100807
36890 2010-12-14 4 20100716
答案 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
。