AWK/... 줄 시작 대체에 대한 줄 카운터를 어떻게 증가시키나요?

AWK/... 줄 시작 대체에 대한 줄 카운터를 어떻게 증가시키나요?

처음에는 SED( )를 생각했지만 sed "s/^/COUNTER \&/" /tmp/1.tex단일 라인용으로 설계되었고 sed를 통해 카운터 자체를 증가시킬 수 없었기 때문에 awk통합 방법에 대한 광범위한 경험이 있으므로 지금 생각하고 있습니다. gawk데이터

What & South Dragon & North Dragon    & 5 \\ \hline
What & South Dragon & North Dragon    & 5 \\ \hline
What & South Dragon & North Dragon    & 5 \\ \hline

예상 출력

1 & What & South Dragon & North Dragon    & 5 \\ \hline
2 & What & South Dragon & North Dragon    & 5 \\ \hline
3 & What & South Dragon & North Dragon    & 5 \\ \hline

운영 체제: 데비안 8.5

답변1

nl파일 줄 번호를 매기는 유틸리티입니다. 용법:

nl /path/to/file

귀하의 구체적인 경우:

$ nl  -s ' & ' input.txt                                                                                                 
     1 & What & South Dragon & North Dragon    & 5 \\ \hline
     2 & What & South Dragon & North Dragon    & 5 \\ \hline
     3 & What & South Dragon & North Dragon    & 5 \\ \hline

답변2

이것은 당신이 추구하는 것을 달성합니다. (같은 내용인데 awk '$0=NR" & "$0' filename좀 미스테리하네요)

awk '{print NR,"&",$0}' filename
1 & What & South Dragon & North Dragon    & 5 \\ \hline
2 & What & South Dragon & North Dragon    & 5 \\ \hline
3 & What & South Dragon & North Dragon    & 5 \\ \hline

또는 sed원하는 경우 동일한 결과가 생성됩니다.

sed = filename | sed 'N;s/\n/ \& /'

perl가까운.

perl -pe '$_="$. & $_"' filename
perl -pe 's/^/$. & /' filename

답변3

Python은 훌륭한 대안이 될 수 있습니다.

$ python -c "import sys;lines=[str(i)+' & '+l for i,l in enumerate(sys.stdin,1)]; print ''.join(lines)" < input.txt      
1 & What & South Dragon & North Dragon    & 5 \\ \hline
2 & What & South Dragon & North Dragon    & 5 \\ \hline
3 & What & South Dragon & North Dragon    & 5 \\ \hline

텍스트를 Python의 표준 입력으로 리디렉션하고 거기에서 줄을 읽는 방식으로 작동합니다. 이 함수는 입력으로 지정된 enumerate()행 수를 제공하며 시작 인덱스입니다. 나머지는 간단합니다. 인덱스를 행 자체와 연결된 문자열로 변환하여 새로운 문자열 목록을 구성합니다. 마지막으로 이 함수는 목록의 모든 항목을 test 로 재조립합니다 .sys.stdin1' & '''.join()

또는 다음은 더 쉽게 읽을 수 있도록 여러 줄로 구성된 스크립트 파일 버전입니다.

#!/usr/bin/env python
import sys

for index,line in enumerate(sys.stdin,1):
    print str(index) + ' & ' + line.strip()

작동 원리는 동일합니다.

$ ./line_counter.py  < input.txt                                                                                         
1 & What & South Dragon & North Dragon    & 5 \\ \hline
2 & What & South Dragon & North Dragon    & 5 \\ \hline
3 & What & South Dragon & North Dragon    & 5 \\ \hline

하지만 bash에서 수행하고 싶다면 다음과 같이 할 수도 있습니다.

$ counter=1; while read line ; do printf "%s & %s\n" "$counter" "$line" ; counter=$(($counter+1)) ; done < input.txt
1 & What & South Dragon & North Dragon    & 5 \ hline
2 & What & South Dragon & North Dragon    & 5 \ hline
3 & What & South Dragon & North Dragon    & 5 \ hline

답변4

cat -n이는 자동 번호 매기기와 함께 사용하기 위한 옵션이기도 합니다.

while read num line;do echo $num "&" $line;done <<<$(cat -n a.txt)

관련 정보