Unix将特定列替换为另一个字符串的一个值

时间:2018-04-23 20:08:10

标签: unix awk sed

当我有以下描述时,我想更改文件的第四列。我找不到如何解决它。当字符串1-8出现时,我想用01-08替换它,但只能用管道分隔的4列。

SBMM01|CAM|22|01-08|NAP|VL|OPEN|1
CCSM01|CAM||1-8|NAP|CR|CLOSED|1
EZEM01|CAM|19|01-08|SPL|CC|OPEN|5
SPTD01|CAM|29|25-32|CDO|VG|OPEN|1
NRFL01|||1-8|NAP|CR|CLOSED|5
|||1-8|NAP|CR|CLOSED|5

通过

SBMM01|CAM|22|01-08|NAP|VL|OPEN|1
CCSM01|CAM||01-08|NAP|CR|CLOSED|1
EZEM01|CAM|19|01-08|SPL|CC|OPEN|5
SPTD01|CAM|29|25-32|CDO|VG|OPEN|1
NRFL01|||01-08|NAP|CR|CLOSED|5
|||01-08|NAP|CR|CLOSED|5

如何在Unix中使用sed或awk更改它?

2 个答案:

答案 0 :(得分:1)

仅更改指定值

$ awk 'BEGIN{FS=OFS="|"} $4=="1-8"{$4="01-08"}1' file

你可以更普遍地格式化打印数字零填充。

答案 1 :(得分:0)

使用sed

sed -E 's/((.*|){3})(1-8)(.*)/\101-08\4/' infile