Text-Processing
如何替換文件特定列中給定條件的值
我有文件由管道分隔
|
,我希望當第 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