在同一领域内查找和替换

时间:2013-10-04 06:17:29

标签: string replace sed awk split

我的记录包含以下数据:

0IAB20130926

1~CVBB2WD~ED000~~~1152~1~1273~mc0332~abc@mail.com~29~0~101~ 1~CVBB2WD~ED000~~~1059~1~1274~mc0332~abc@mail.com~29~0~102~ 1〜CVBB2WF〜ED000 ~~~~~~~~ 21〜0〜1〜 “VAL1,VAL2,VAL3,VAL4,val5,VAL6,val7” 1〜CVBB2WD〜ED000 ~~~~~~~~ 21〜0〜1〜 “VAL1,VAL2,VAL3,VAL4,val5,VAL6,val7”

9000027681

第一行和最后一行是页眉和页脚(分别以0和9开头)。 数据以1~开头 每行都有各种字段,每个字段用~deelimeter分隔。大多数行在第14个字段中没有任何值(如前两行),除了少数记录具有类似“val1,val2,val3 ..”的值(如最后两行) 我需要使用位置(第14位)找到它们,并且需要替换位于第4,第5,第6,第7,第8位的空文件。 所以我的输出应该是这样的:

0IAB20130926

1~CVBB2WD~ED000~~~1152~1~1273~mc0332~abc@mail.com~29~0~101~ 1~CVBB2WD~ED000~~~1059~1~1274~mc0332~abc@mail.com~29~0~102~ 1〜CVBB2WF〜ED000〜VAL1〜val2次〜VAL3〜VAL4〜val5〜VAL6〜val7〜21​​〜0〜1 1〜CVBB2WD〜ED000〜VAL1〜val2次〜VAL3〜VAL4〜val5〜VAL6〜val7〜21​​〜0〜1

9000027681

1 个答案:

答案 0 :(得分:0)

这个awk应该可以工作:

awk -F'~' '/^1/ && $14!=""{gsub(/,/, "~", $14); $14=substr($14, 2, length($14)-2); 
           $0=$1 OFS $2 OFS $3 OFS $14 OFS $11 OFS $12 OFS $13}1' OFS='~' file

0IAB20130926

1~CVBB2WD~ED000~~~1152~1~1273~mc0332~abc@mail.com~29~0~101~
1~CVBB2WD~ED000~~~1059~1~1274~mc0332~abc@mail.com~29~0~102~
1~CVBB2WF~ED000~val1~val2~val3~val4~val5~val6~val7~21~0~1
1~CVBB2WD~ED000~val1~val2~val3~val4~val5~val6~val7~21~0~1

9000027681