텍스트 파일의 각 줄에 줄 번호와 탭을 붙이려면 어떻게해야합니까?


45

텍스트 파일의 각 줄 시작 부분에 줄 번호와 탭을 어떻게 추가 할 수 있습니까?


내가 궁금해하는 것은 Windows에서 어떻게하는지 ...
— itsadok

4
이것이 스택 오버 플로우에 있어야합니까? 수퍼 유저에게는 메모장과 많은 인내심이 있습니다.
— kokos

2
따라서 앞에 추가하거나 추가하고 싶습니까? 제목과 본문이 다릅니다.;)
— matpie

나는 시작 부분 에 덧붙이고 싶다고 생각한다 .
— Richard Hoskins

Windows에서 다른 프로그래밍 질문과 마찬가지로 Cygwin을 설치 한 다음 아래 답변을 사용할 수 있습니다.
— Jonathan Hartley

답변:


49
awk '{printf "%d\t%s\n", NR, $0}' < filename

10
또는 awk '{print NR, "\t", $0}'.
— jtbandes

1
nl 명령 줄을 사용하여 아래의 대답은 훨씬 간단한 솔루션입니다.
— Daniel Ribeiro

2
@DanielRibeiro 더 단순하지만 안정성과 유연성이 떨어집니다.
— Jonathan Hartley

@DanielRibeiro 사용하는 대답 nl은 잘못되었습니다. 소스 코드에서는 공백 만있는 행을 계산하지 않으므로 올바른 행 번호를 제공하지 않습니다.
— oligofren

@jtbandes 솔루션은 줄 번호와 탭 사이에 공백을 추가합니다 (적어도 나의 Mac에서는)
— Yossi Vainshtein

55

nl 명령이이를 수행해야하지만 행 번호 앞에 공백도 추가합니다. Linux coreutils의 일부입니다.

nl lines.txt
 1  $bkWTN
 2  $cV8$.

4
실제로 nl숫자 앞에 공백을 생략하도록 지시 할 수 있습니다 . 이 -w1옵션을 사용하여 숫자의 최소 너비를 1로 지정하십시오.
— cjm

2
'nl'은 기본적으로 텍스트가 '\ :'또는 '\ : \ :'또는 '\ : \ : \ :'와 같이 줄로 구분 된 머리글과 바닥 글이있는 '페이지'로 분할된다고 가정합니다. 텍스트에 이와 같은 줄이 있으면 'nl'은 해당 줄을 삼키거나 번호가없는 섹션 또는 섹션에서 1부터 번호 매기기를 다시 시작하는 등 예기치 않은 결과를 생성합니다. 이 동작을 방지하려면 -dXY를 사용하십시오 (여기서 XY는 텍스트에서 한 행에 나타나지 않는 문자 쌍임). 일반적으로 예측하기 어려울 수 있으므로이 페이지의 다른 솔루션 중 하나를 사용하는 것이 좋습니다.
— Jonathan Hartley

'-w1'을 사용하면 숫자 뒤의 공백이 제거 될뿐만 아니라 줄 번호가 한 문자 너비로 잘 리므로 줄 번호는 최소 유효 숫자 만 표시합니다. 이것은 거의 확실히 당신이 원하는 것이 아닙니다.
— Jonathan Hartley

4
으로 -nln당신이 할 수는 줄 번호 앞에 공간 (들)을하지 않으려면 왼쪽 정당화. 또한, 탭을 지정할 분리 당신은 사용할 수 있습니다 -s$'\t'또는 -s' '(로 작은 따옴표 사이에 탭 삽입 ctrl+v후 tab).
— don_crissti

2
@JonathanHartley nl -w1(GNU coreutils 8.24)는 줄 번호를 자르지 않습니다 .
— Skippy le Grand Gourou

10
sed = test.txt | sed 'N;s/\n/\t/'

"sed ="명령은 줄 번호와 캐리지 리턴, 다음 줄을 출력합니다.

"N; s / \ n / \ t /"표현식은 각 줄을 가져 와서 다음 줄 (예 : 줄 번호와 줄)을 가져오고 캐리지 리턴을 탭으로 바꿉니다.


인쇄는 나오지 내 버전과 전혀 탭과 "t": 8t 나는 히스테리 알몸 배고파, 9t 광기에 의해 파괴 우리 세대의 가장 좋은 마음을 보았다
— 리처드 호스킨스

1
주 \n(최초의 광범위한 사용이 유닉스 때부터, 일반적으로 그냥 "줄 바꿈"라고 함) 라인 피드이며, \r캐리지 리턴입니다. Windows는 \r\n(라고도 함)를 사용합니다 CRLF.
— Camilo Martin

(Yay nitpicking!)
— Camilo Martin

윈도우가 어떻게 다른지에 대해 nitpicking에 들어가려면 UTF16을 고려해야합니다.
— mc0e

4
cat -n <yourfile> | perl -pe "s/^\s*(\d+)\s+/\1\t/"

cat -n은 행 번호를 "123 linecontents"로 추가하고 regexp는이를 "linenumberTABlinecontents"로 수정합니다.


3
perl -pe "s/^/$.\t$_/" file.txt

또는

perl -ne "print qq($.\t$_)" file.txt

2

어때요?

cat -n somefile.txt

?


1
탭이 없습니다. (15 개의 문자가 필요한 주석은 어리석은 요구 사항입니다.)
— Richard Hoskins

1
이것은 내 시스템에 탭을 생성합니다. 고양이 (GNU coreutils) 6.10.
— innaM

내 시스템에서는 (탭) 번호 (공백) 줄을 추가합니다. BSD 유틸리티.
— Richard Hoskins

2

다음은 한 줄짜리 bash 솔루션입니다.

$ IFS=$'\n';x=1;for l in $(<file.txt);do echo -e "$x\t$l";((x+=1));done
$ IFS=

첫 번째 IFS 설정은 bash에게 한 번에 전체 줄을 읽도록 지시합니다. 두 번째 줄은 IFS를 기본값으로 재설정합니다.

추가 보너스로, 그것은 당신의 쉘에서 완벽하게 실행되며 프로그램을 실행하지 않습니다!


1

좋아요, 우리는 이것을하는 방법을 모으고 있기 때문에,

 grep -n . file.txt | sed 's/\(^[0-9]*\):/\1    /g'
 # this is a tab with Ctrl-V + Tab  =====>  ---- 

이제 나는 이것을 본다. 확인, 내 게시물을 삭제하십시오. 뭐? 당신은 SU 자신의 게시물을 삭제할 수 없다고 말합니까?
— Kevin M

grep + sed == awk
— Tadeusz A. Kadłubowski

1
sed file.txt -e 's/^/\t/' | cat -n | sed -e 's/^\t//'

또는 일부 비 GNU sed의 경우 :

cat file.txt | sed -e 's/^/\\t/' | cat -n | sed -e 's/^\\t//'

내 버전의 sed에 탭이없는 "t"를 인쇄합니다.
— Richard Hoskins

이중 이스케이프로 편집; 그렇게 해보십시오.
— 혼돈

다른 모든 것이 실패하면 탭을 누르십시오. :) (또는 쉘이 문제를 일으키는 경우 ^ V 탭)
— 혼돈

나오지도 : 1 : "있는 test.txt"정의되지 않은 라벨 'est.txt'
— 리처드 호스킨스

'cat test.txt | sed -e 's / ^ / \\ t /'| cat -n 'prints (tab) number (space) \ t (line)
— Richard Hoskins
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.