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
答案1
以下应该有效(我希望不需要解释)
awk -F'|' -vOFS='|' '$2 ~ /^10/ && length($2) == 8{$2="9"$2}; {print}' file.txt
答案2
使用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
会被错误地更改