我有一个字段,其中包含类似于:
HEJ;DU;NORDEN;13322;90
ER;HER;NOGEN;334333;1我希望输出一个文件,其中$4 (可以是5位数或6位数)被分割成两个独立的字段,这取决于长度(如果5拆分为3-2,如果拆分为3-3 )。
所以输出应该是
HEJ;FRA;NORDEN;133;22;90
ER;HER;NOGEN;334;333;1有没有人对如何分开有好的建议?
我一直在玩awk和gsub,如果我只为字段这样做的话,它就能工作,但接下来的问题是让它与其他字段重新对齐,而我还没有意识到如何将gsub函数嵌入到只涉及一列数据的表达式中?
发布于 2018-06-27 14:50:17
您可以使用substr函数。
first = substr($4,1,3)
second = substr($4,4)
$4 = $first ";" $second您不需要有条件的,因为第一部分总是3位长。
发布于 2018-06-27 14:45:47
编辑:更简单的方法。
awk -F";" '{sub(/^.../,"&" OFS,$4)} 1' OFS=";" Input_file不检查像列的长度这样的条件是5或6,如果您想这样做,那么我们也可以在上面的代码中添加这些条件。
请你试着跟我说一下,如果这对你有帮助的话,请告诉我。
awk -F";" -v s1=";" '
{
$4=length($4)==5?substr($4,1,3) s1 substr($4,4):length($4)==6?substr($4,1,4) s1 substr($4,5):$4
}
1' OFS=";" Input_filehttps://stackoverflow.com/questions/51065675
复制相似问题