Text-Processing

如何替換文件特定列中給定條件的值

  • November 5, 2017

我有文件由管道分隔|,我希望當第 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

你可以用 awk 來做

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

這將awk基於 拆分欄位|,然後將輸出欄位分隔符設置為|當我們寫回行時。然後,如果第六個欄位 ,用一個特定的值替換第七個欄位,如果它是一個 I $6,則A替換一個不同的值。然後在最後列印出該行,如果我們做了任何更改,請使用我們的更改。

sed

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

關鍵是用所需的數字代替後面或(即最後一列)之後的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

引用自:https://unix.stackexchange.com/questions/218896