파일의 각 줄에서 문자열에 번호를 매기는 방법

파일의 각 줄에서 문자열에 번호를 매기는 방법

file.txt가 다음과 같다고 가정하면:

line_ some text
line_ some text
line_ some text

Bash를 사용하여 이와 같은 줄 번호를 매기는 방법:

line_1 some text
line_2 some text
line_3 some text

이것은 지금까지 내 생각이지만 작동하지 않습니다.

#!/bin/bash
var = 1
cat ./file.txt
while read line; do           
  sed "s/line_/line_(( var++ ))/"
done < ./file.txt 

답변1

awk를 사용할 수 있습니다.

awk '$1=$1 FNR' <file>

$1각 레코드의 첫 번째 단어입니다(이 경우 행). FNR입력 레코드 번호(이 경우 줄 번호)입니다.

이 명령은 각 줄을 각 first word줄로 바꿉니다 first word + line-number.

답변2

Perl에서 이를 수행하는 방법은 다음과 같습니다.

perl -pe 'print "line_$.  $_";'  [file(s)]

파일로 보내려는 경우:

perl -pe 'print "line_$.  $_";'  [input_file] > [output_file]

답변3

내가 보기엔 당신이 이곳에서 꽤 잘 보호받고 있는 것 같은데, 정확히 어떤가요?

sed -et -e's/_ /\n/;P;=;D' <in | paste -'d_ ' - - -  >out

sed정확히 수학 분야의 천재는 아니지만 가끔 친구들이 속임수를 써서 그럭저럭 넘어가곤 합니다.

이렇게 변경됩니다...

line_ some text
line_ some text
line_ some text

...도착하다...

line_1 some text
line_2 some text
line_3 some text

답변4

글쎄, 당신은 Shell/Bash를 처음 접하는 것 같으므로 교육적인 이유로 여기에 당신이 선택한 기술을 다루는 솔루션이 있습니다(http://mywiki.wooledge.org/BashFAQ/001,http://mywiki.wooledge.org/BashGuide/Parameters#Parameter_Expansion)

var=1
while read -r Line; do 
  printf "%s\n" "${Line/line_/line_$var}" >> ./file-new.txt
  let var++
done < ./file.txt

관련 정보