如何替换文件特定列中给定条件的值

如何替换文件特定列中给定条件的值

我有由管道分隔的文件|,我希望当第 6 列包含第 7 列中的字母I打印时0758000,以及当第 6 列包含第 7 列中的字母A打印时0800000,我找不到该怎么做!

例子:

原始文件

cat file1.txt
Z89|EEE333333|100001|JANMC84|19990101|I|1800040
Z89|EEE444444|200001|JANMC84|19990101|I|1800040
Z89|EEE222222|300001|JANMC84|19990101|A|1800040
Z89|EEE555555|700001|JANMC84|19990101|A|1800040

结果应该是:

Z89|EEE333333|100001|JANMC84|19990101|I|0758000
Z89|EEE444444|200001|JANMC84|19990101|I|0758000
Z89|EEE222222|300001|JANMC84|19990101|A|0800000
Z89|EEE555555|700001|JANMC84|19990101|A|0800000

答案1

你可以用 awk 来做到这一点

awk -F\| 'BEGIN {OFS=FS} $6 == "A" {$7 = "0800000"} $6 == "I" {$7 = "0758000"}; 1' file1.txt

这将awk基于 分割字段,然后在我们写回行时|将输出字段分隔符设置为。|然后,如果第六个字段$6, 将A第七个字段替换为特定值,如果是 I,则替换为不同的值。然后在末尾打印该行,并包含我们的更改(如果我们做了任何更改)。

答案2

sed

sed -e 's/\(I|\)[^|]*$/\10758000/;s/\(A|\)[^|]*$/\10800000/' file1.txt

要点是将or (即最后一列)s之后的所有内容替换为所需的数字。I|A|

结果:

Z89|EEE333333|100001|JANMC84|19990101|I|0758000
Z89|EEE444444|200001|JANMC84|19990101|I|0758000
Z89|EEE222222|300001|JANMC84|19990101|A|0800000
Z89|EEE555555|700001|JANMC84|19990101|A|0800000

答案3

SLPJP_Box                                                        11/03/2017 22:00:07  -----                RU 13232789/1
 SLPJP_PRD_SOB_MAIN                                              09/07/2017 22:00:30  09/07/2017 22:00:57  OI 11769239/1 0
 SLPJP_PRD_SOD_BOX                                               11/03/2017 22:00:18  -----                RU 13232789/1
  SLPJP_PRD_SOD_001                                              11/03/2017 22:00:34  11/03/2017 23:10:25  SU 13232789/1 0
  SLPJP_PRD_SOD_002                                              11/03/2017 23:10:26  -----                RU 13232789/1
  SLPJP_PRD_SOD_003                                              -----                11/02/2017 22:18:34  AC 13232789/0
  SLPJP_PRD_SOD_004                                              -----                11/02/2017 22:19:55  AC 13232789/0

我想打印所有列,但删除所有列 SU、OI、AC 列,并删除任何分隔符的所有空白空间

相关内容