我想使用awk for window拆分由制表符分隔的合并字段?
第5列和第17列中的字段合并在一起,我想拆分合并后的字段并放在单独的字段中。 我的数据是这样的我想使用awk for window拆分由制表符分隔的合并字段?,awk,Awk,第5列和第17列中的字段合并在一起,我想拆分合并后的字段并放在单独的字段中。 我的数据是这样的 326502010-12-10 320100807 368902010-12-14 420100716 32650 2010-12-10 3 20100807 36890 2010-12-14 4 20100716 但我想看到这样的情景 326502010-12-10 320100807 368902010-12-14
326502010-12-10 320100807
368902010-12-14 420100716
32650 2010-12-10 3 20100807
36890 2010-12-14 4 20100716
但我想看到这样的情景
326502010-12-10 320100807
368902010-12-14 420100716
32650 2010-12-10 3 20100807
36890 2010-12-14 4 20100716
最好使用
sed
按字符分割:
$ sed -r 's/^(.{5})(.{18})/\1\t\2\t/' file
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
选项,您可以设置一个列表,表示要剪切的线条部分。逗号,
被设置为制表符的--输出分隔符替换。使用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
将输入行打印为默认操作
如果日期前的数字长度不同,请使用以下方法:
$ awk '{sub(/....-..-../,"\t&",$1); sub(/^./,"&\t",$2)} 1' file
32650 2010-12-10 3 20100807
36890 2010-12-14 4 20100716
sub
将日期部分替换为选项卡(\t
)和匹配部分(&
),即日期。第5列和第17列的$2
的后面部分大致相同?你可能是说第五和第十七个角色,但我用的是awk。我期待着得到一个解决方案使用AWK然后开始张贴您的尝试。另外,这个sed代码很容易翻译成awk。嗨,这个脚本工作得很好,但是我的一些字段被扭曲了。拆分字段后如何避免扭曲字段?有没有可能修复该字段?谢谢