줄 번호를 바꾸고 생성하는 방법

줄 번호를 바꾸고 생성하는 방법

다음 데이터가 포함된 입력 파일이 있습니다. 이를 아래에 언급된 출력 파일로 변환하려면 어떻게 해야 합니까?

입력 파일

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줄 번호( (레코드 수)) 를 출력 하고 0으로 채웁니다.
  • 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옵션에는 줄 번호와 데이터 사이에 구분 기호가 없는 0으로 채워진 숫자( -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

관련 정보