파일의 첫 번째 줄에 파일의 줄 번호를 인쇄합니다. [닫기]

파일의 첫 번째 줄에 파일의 줄 번호를 인쇄합니다. [닫기]

나는 줄 번호를 계산하기 위해 sed를 사용하고 있습니다.

sed - n 'S=' file.txt

첫 번째 줄에 결과를 인쇄하고 싶습니다 file.txt.

답변1

이렇게 하려면 파일을 두 번 통과해야 합니다. 한 번은 줄 수를 계산하고, 두 번째는 결과를 처음에 삽입합니다. sed최고의 도구는 아닙니다. 노력하다:

cat <(wc -l < file.txt) file.txt

답변2

흠, "다중 고양이 스키닝" 세션인 것 같네요. 원시 행 수만 필요하다고 가정하면 어떻습니까?

sed 1i$(< file wc -l) file

또는

sed 1i$(sed -n "$=" file ) file

sed -i 1i....변경 사항을 영구적으로 만들기 위해

답변3

사용암소 비슷한 일종의 영양 sed,만약에행의 수는문서카운터 행을 추가하기 전에:

sed -i -n '1h;1!H;${=;x;p}' file

작동 방식:

  1. -n: 기본 인쇄를 끕니다.

  2. 1h;1!H;: 각 라인을 h이전 버퍼로 이동합니다. (간단한 H접근 방식은 거의 효과가 있지만 원하지 않는 빈 줄도 생성됩니다.)

  3. ${=;x;p}: sed마지막 줄에 도달하면 줄 번호를 인쇄합니다 =. 그런 다음 x전체 홀드 버퍼를 패턴 버퍼로 변경하고 인쇄합니다.

답변4

awk해결책:

마지막 줄 뒤에 추가하는 것은 쉽습니다.

awk '1; END{print NR}' file

tac다음을 사용하여 이를 첫 번째 줄에 추가 할 수 있습니다 .

tac file | awk '1; END{print NR}' | tac

다른 솔루션과 비교하여 이 솔루션의 장점은 파일이 한 번만 열린다는 것입니다.


유일한 awk대안은 좀 더 복잡합니다. 파일을 두 번 입력해야 합니다. 먼저 줄 수를 계산하고 두 번째로 NR을 처음부터 인쇄해야 합니다.

awk 'FNR!=NR{if(FNR==1)print NR-1;print;}' file file

또 다른 awk유일한 대안(아마도 GNU에만 해당):

awk -ireadfile 'NR==1{print split(readfile(FILENAME), l, "\n")-1}1' file

관련 정보