我有一个包含类似于以下内容的行的字段:
HEJ;DU;NORDEN;13322;90
ER;HER;NOGEN;334333;1
我想输出一个文件,其中$ 4(可以是5或6位数字)被分为两个单独的字段,具体取决于长度 如果5的分割应该是3-2,如果6的分割应该是3-3
所以输出应该是
HEJ;FRA;NORDEN;133;22;90
ER;HER;NOGEN;334;333;1
有人对如何进行分隔提出好建议吗?
我一直在玩awk和gsub,如果我只在领域上使用它会奏效,但是令人困惑的是要使其与其他领域重新结合起来,而且我还没有意识到可以将gsub函数嵌入到仅接触一列数据的表达式中?
答案 0 :(得分:3)
您可以使用substr
功能。
first = substr($4,1,3)
second = substr($4,4)
$4 = $first ";" $second
您不需要附加条件,因为第一部分始终为3位数字。
答案 1 :(得分:2)
编辑: 更简单的方法。
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_file