我有一个包含以下数据的输入文件,如何将其转换为下面提到的输出文件。
输入文件
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
(记录数))并用 0 填充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 ''
)。这些数字的宽度为五位数 ( -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