次のデータを含む入力ファイルがあります。これを以下の出力ファイルに変換するにはどうすればよいですか?
入力ファイル
00001abc
00002def
00003ghi
00001jkl
00002mno
00003pqr
00001stu
00002vwx
00003yza
00004bcd
結果ファイル
00001abc
00002def
00003ghi
00004jkl
00005mno
00006pqr
00007stu
00008vwx
00009yza
00010bcd
答え1
別のawk
方法。
awk -F'[0-9]+' '{printf("%05d%s\n",NR,$2)}' infile >newfile
答え2
努力する
awk '{ printf "%05d%s\n",NR,substr($1,6)}' input_file > output_file
どこ
printf "%05d" .. NR
NR
行番号((レコード数))を出力し、ゼロで埋めます。substr($1,6)
$1
6で始まる部分文字列を(最初の引数)抽出します。
答え3
sed
各行の先頭から既存の番号を削除し、nl
特定の方法で行に番号を付けるために使用されます。
$ sed 's/^[0-9]*//' file | nl -n rz -s '' -w 5
00001abc
00002def
00003ghi
00004jkl
00005mno
00006pqr
00007stu
00008vwx
00009yza
00010bcd
これらのnl
オプションには、行番号とデータの間に区切り文字がないゼロで埋められた数字(-n rz
、数字を右揃えすることもありますが、ここでは重要ではありません)が必要です(-s ''
)。この数字の幅は5桁(-w 5
)です。
答え4
何で
while read a;do i=$((i+1));printf "%05d%s\n" $i "${a##*[0-9]}";done < infile > outfile
所定の位置に交換
printf '%s\n' $(while read a;do i=$((i+1));printf "%05d%s\n" $i "${a##*[0-9]}";done < infile) > infile