'tail'명령에 해당하는 Windows


107

Windows 명령 줄에서 * nix tail 명령 을 시뮬레이션하는 방법이 있습니까? 파일이 있고 텍스트 의 처음 n 줄을 잘라내는 방법을 원합니다 . 예를 들면 :

D:\>type file.txt
line one
line two
line three
D:\>*[call to tail]* > result.txt

D:\>type result.txt
line two
line three

10
head첫 번째 n 줄만 빼지 않고 표시 하지 않습니까?
Joey

Chris는 2009 년 이후의 새로운 답변,보다 구체적으로 Amit Portnoy의 답변을 고려하십시오 . 귀하의 질문이 일반적이므로 많은 사용자가이 웹 페이지를 찾을 수 있습니다. 그리고 그들은 첫 번째 대답, 즉 당신이 수락 한 대답을 읽은 후에 그 답을 읽는 것을 멈출 수 있습니다. 수락 한 답변을 오늘날 가능성으로 업데이트 된 다른 답변으로 변경할 수 있습니다. 건배)
olibre

나는 약간 혼란스러워. 원래 질문은 Unix 스타일 head명령에 관한 것이었지만 원하는 출력은 원하는 것처럼 보였습니다 tail. 대답은에 관한 head것이지 아닌 것 같습니다 tail.
blakeoft

@blakeoft 원래 질문은의 행동을 요구 tail했지만 제목은 말했다head
MM

답변:


89

정확히 동등한 것은 없습니다. 그러나 n 번째 줄 이후에 파일 출력을 시작하는 + n 옵션이있는 기본 DOS 명령 "more"가 있습니다.

DOS 프롬프트 :

C:\>more +2 myfile.txt

위의 명령은 처음 두 줄 이후의 모든 것을 출력합니다.
이것은 실제로 Unix head 의 반대입니다 .

Unix 콘솔 :

root@server:~$ head -2 myfile.txt

위의 명령은 파일의 처음 두 줄만 인쇄합니다.


8
아니요, 동일하지 않습니다. tail파일 끝부터 계산을 시작합니다. 따라서 tail -2마지막 두 줄을 인쇄합니다.
ADTC 2011

5
처음 n 개의 문자도 인쇄 할 수 있습니까?
Qwerty

@ADTC (내 버전) 꼬리는 음수를 지원하지 않습니다. 머리 만합니다 (gnuwin32)
nl-x

@ nl-x -2는 음수가 아닙니다. -n 2(줄 수) 의 축약 형 버전입니다 . 안타깝게도의 너무 많은 구현 이을 tail지원하지 않아 지원 하는 구현 -2과 매우 일치 head하지 않습니다. 그것은 나를 너무 많이 짜증나게했다.
ADTC

@ADTC 아 죄송합니다. 나는 혼동하고 head -n -2있는 다릅니다 head -n 2. 그러나 꼬리에는 후자가 존재하지 않습니다.
nl-x

111

경우 , 당신은 Windows PowerShell을 설치 방금 cmd.exe를에서 실행할 수 있습니다 (I는 XP 이후 포함 생각)

헤드 명령 :

powershell -command "& {Get-Content *filename* -TotalCount *n*}"

꼬리 명령 :

powershell -command "& {Get-Content *filename* | Select-Object -last *n*}"

또는 PowerShell에서 직접 :

Get-Content *filename* -TotalCount *n*
Get-Content *filename* | Select-Object -last *n*


최신 정보

PowerShell 3.0 (Windows 8 이상) Tail은 alias Last. HeadFirst별칭TotalCount 도 추가되었습니다.

따라서 명령은 다음과 같이 다시 작성할 수 있습니다.

Get-Content *filename* -Head *n*
Get-Content *filename* -Tail *n*

이것은 head대신 처럼 작동하지 tail않습니까?
blakeoft

@blakeoft 예, 그렇습니다 ... 내 대답을 업데이트했습니다. 누군가가 이것에 대해 언급하기 전에 2 년 17 표가 걸린 것이 놀랍습니다.
Amit Portnoy 2015 년

@blakeoft는 방금 질문이 편집되었음을 깨달았습니다! (stackoverflow.com/posts/1295068/revisions 참조). 원래는 모두 답변 ... 포함하도록 업데이트 ... 머리 명령을 요청
아 미트 Portnoy 씨가

2
@AmitPortnoy이 스택 교환 어딘가에서 Get-Content꼬리 명령이 있다고 말하는 또 다른 대답을 찾았습니다 . 예를 들어 Get-content -Tail 5 file.txt는 file.txt의 마지막 5 줄을 인쇄합니다. 답변 btw를 업데이트 해 주셔서 감사합니다.
blakeoft

2
필터로 사용하는 방법은 없나요? (예 : 파일 대신 stdin 읽기)
eadmaster

24
more /e filename.txt P n

여기서 n은 표시 할 행 수입니다. 빠르게 작동하며 head명령 과 똑같습니다 .


14
P, S 등과 같은 명령은 사용자가 프롬프트에서만 입력 할 수 있습니다. more 명령에 전달할 수 없습니다. 따라서, 위의 예제는 작동하지 않습니다
Philibert에 Perusse에게


12

이것은 완전한 해킹이지만 형식, 헤더 등을 검사하고 싶은 거대한 파일이고 해결책을 찾고 있다면 항상 'more'출력을 새 파일로 리디렉션하고 CTRL-C 빨리. 출력 행은 정확하게 제어 할 수 없으며 출력 행 중간에서 종료 할 가능성이 높지만 사용할 수없는 작은 파일을 잡는 저렴한 방법입니다.

전의.

C : \ more test.csv> test.txt 
^ C C : \ more test.txt
라인 1
라인 2
등 ...... 씨:\

9

음, 이것은 그것을 것입니다. 그러나 그것은 보이는 것만 큼 빠릅니다 (대략 O (n * m), 여기서 n은 표시 할 줄 수이고 m은 파일의 총 줄 수입니다) :

for /l %l in (1,1,10) do @for /f "tokens=1,2* delims=:" %a in ('findstr /n /r "^" filename ^| findstr /r "^%l:"') do @echo %b

여기서 "10"은 인쇄 할 줄 수이고 "filename"은 파일 이름입니다.


6
포트를 다운로드하는 것보다 입력하는 데 오래 걸리는 솔루션의 경우 +1 head.
Camilo Martin

1
참고 : (expr) > out.txt결과를 파일로 보낼 때이 표현식을 괄호 안에 넣으십시오 . 그렇지 않으면 마지막 줄만 가져옵니다. 또는 추가- expr >> out.txt.
cz

9

Powershell :

Get-Content C:\logs\result.txt -Tail 10

Get-Content C:\logs\result.txt -wait (monitor the tail)

이것은 정답이며 최신이며 관련성이 있습니다 (cmd와 달리). 감사.
cudacoder

7

Matt가 이미 언급 한 + n을 더 많이 사용하는 경우 긴 파일에서 일시 중지를 방지하려면 다음을 시도하십시오.

더 많은 +1 myfile.txt> con

more에서 출력을 리디렉션하면 일시 중지되지 않고 여기에서 콘솔로 리디렉션됩니다. 원하는 최종 결과 인 경우 추가 일시 중지없이 이와 유사한 다른 파일로 유사하게 리디렉션 할 수 있습니다. >를 사용하여 파일로 리디렉션하고 이미있는 경우 덮어 쓰거나 >>를 사용하여 기존 파일에 추가합니다. (둘 중 하나를 사용하여 con으로 리디렉션 할 수 있습니다.)



5

Get-content -Tail n file.txt powershell을 사용하는 것은 tail 리눅스에서 .

Get-Content *filename* | Select-Object -last *n*모든 일 구문 분석 / 부하 이상으로 제안했다. 말할 필요도없이 내 10GB 로그 파일이 만족스럽지 않았습니다 ... -Tail옵션은 파일 끝에서 시작됩니다.



2

다음은 DOS에서 처음 9 줄을 제공하는 빠른 기본 헤드 명령입니다.

findstr /n "." myfile.txt | findstr "^.:"

각 줄의 처음 2자는 줄 번호가됩니다.



2

PS에서 명령을 사용하십시오.

Select -Last 1

이 명령은 파이프 라인도 가능합니다.

첫 번째 줄을 얻는 예 :

type .\out.txt | Select -Last 1

또는 첫 번째 줄을 얻으려면 :

 type .\out.txt | Select -First 1

1

FWIW, 파일 헤드에서 불확실한 수의 레코드를 잘라 내야하는 사용자에게는 more> 가 잘 작동합니다. 이것은 무언가를 개발하는 초기 단계에서 작업 할 작은 파일을 갖는 데 유용합니다.


1

범위 추출을 시도하지 않았지만 다음 DOS 명령을 사용하여 줄을 얻을 수있었습니다.

find /N " " *.log|find "[6]" 

대부분의 파일에는 공백이 포함되어 있으므로이 명령은 모든 LOG 파일에서 모든 줄을 가져와 기본적으로 각 파일에 대해 1부터 시작하여 번호를 매 깁니다. 번호가 매겨진 결과는 FIND번호 6으로 태그가 지정된 행을 찾는 두 번째 명령 으로 파이프됩니다 .


1

이 페이지 에는 사용할 수 있는 무료 head유틸리티 가 있습니다. 나는 아직 그것을 시도하지 않았습니다.


1
왜 이것이 반대 투표인지 확실하지 않습니다. UNIX 헤드 유틸리티와 똑같이 실행 됩니다 .
coson

1
다운로드 링크입니다. 그는 바이너리를 uuencode하고 대답에 포함시켜야합니까?
GargantuChet

0
set /p line= < file.csv 
echo %line%

cmd Windows에서 변수 % line %에있는 파일의 첫 번째 줄을 반환합니다.



-2

상자에서 벗어날 길이 없다고 생각합니다. DOS에는 그러한 명령이 없으며 배치 파일은 (큰 고통없이) 시뮬레이트하는 데 한계가 있습니다.


-2

경고, 알 수없는 텍스트 입력에 대한 배치 파일, 토큰 및 delims 기능을 사용하는 것은 &,!, <등과 같은 문자의 특수한 해석으로 인해 재앙이 될 수 있습니다. 이러한 방법은 예측 가능한 텍스트에만 예약해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.