9
2番目の列の値が次から始まり10
、2番目の列の長さが次の場合、8
ファイルの2番目の列にプレフィックス番号を追加する必要があります。
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に感謝します。^.*?\|
2番目の列と一致することは保証されません。たとえば、誤ってab|asd|10017516|asd
変更されます。