行番号を置き換えて生成する方法

行番号を置き換えて生成する方法

次のデータを含む入力ファイルがあります。これを以下の出力ファイルに変換するにはどうすればよいですか?

入力ファイル

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" .. NRNR行番号((レコード数))を出力し、ゼロで埋めます。
  • substr($1,6)$16で始まる部分文字列を(最初の引数)抽出します。

答え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)です。

nlPOSIXユーティリティです

答え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

関連情報