다음 데이터가 포함된 입력 파일이 있습니다. 이를 아래에 언급된 출력 파일로 변환하려면 어떻게 해야 합니까?
입력 파일
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
옵션에는 줄 번호와 데이터 사이에 구분 기호가 없는 0으로 채워진 숫자( -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