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
GNU를 이용한 perl
솔루션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
이 필요하지 않은 경우 추가할 수 있습니다.
편집하다:
Perl one-liner의 버그를 지적한 @drg에게 감사드립니다. ^.*?\|
두 번째 열과 일치하는 것이 보장되지 않습니다. 예를 들어 ab|asd|10017516|asd
잘못 변경됩니다.