Shell-Script
在文件特定列中的給定條件的欄位中添加值
9
當第二列的值以第二列的開頭10
並且第二列的長度為8
範例時,我需要文件第二列的前綴數字
file.txt
T01|10017516|01|ABCD|1203|EFGH T01|10905704|01|ABCD|1203|EFGH T01|550007656|02|ABCD|1203|EFGH T01|550007657|01|ABCD|1203|EFGH T01|10190570|01|ABCD|1203|EFGH T01|950007659|01|ABCD|1203|EFGH T01|950007657|01|ABCD|1203|EFGH T01|10473696|01|ABCD|1203|EFGH T01|850007651|01|ABCD|1203|EFGH
結果應該是:
T01|910017516|01|ABCD|1203|EFGH T01|910905704|01|ABCD|1203|EFGH T01|550007656|02|ABCD|1203|EFGH T01|550007657|01|ABCD|1203|EFGH T01|910190570|01|ABCD|1203|EFGH T01|950007659|01|ABCD|1203|EFGH T01|950007657|01|ABCD|1203|EFGH T01|910473696|01|ABCD|1203|EFGH T01|850007651|01|ABCD|1203|EFGH
使用
perl
和 GNU的解決方案sed
perl -pe 's/^[^|]*\|\K(10\d{6}\|)/9$1/' file.txt sed -r 's/^([^|]*\|)(10[0-9]{6}\|)/\19\2/' file.txt
在任何一種情況下,您都可以添加
-i.bkp
以就地更改文件並將原始文件複製到file.txt.bkp
或僅-i
在不需要備份的情況下編輯:
感謝@drg 指出 perl one-liner 中的錯誤..
^.*?\|
不能確保匹配第二列.. 例如,ab|asd|10017516|asd
會被錯誤地更改
以下應該有效(我希望不需要解釋)
awk -F'|' -vOFS='|' '$2 ~ /^10/ && length($2) == 8{$2="9"$2}; {print}' file.txt