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


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+vtab).
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.