줄 번호로 분할하는 방법 [닫힌]


94

특정 줄 번호에서 400k 줄 길이의 로그 파일을 나누고 싶습니다.

이 질문에 대해 임의의 숫자를 300k로 설정합니다.

이 작업을 수행 할 수있는 Linux 명령이 있습니까 ( 스크립트 내에서 )?

split파일을 크기 나 줄 번호로 동일한 부분으로 나눌 수 있다는 것을 알고 있지만 그게 내가 원하는 것이 아닙니다. 한 파일의 처음 300k와 두 번째 파일의 마지막 100k를 원합니다.

어떤 도움을 주시면 감사하겠습니다. 감사!

다시 생각하면 이것은 수퍼 유저 또는 서버 오류 사이트에 더 적합 할 것입니다.


16
이 질문은 여기에서 괜찮다고 생각합니다. 쉘 스크립트로 풀려고하는 프로그래밍 작업이 있습니다. 널리 사용되는 유닉스 도구를 사용하는 한 줄짜리라면 훨씬 좋습니다!
Jim Lewis

저도 그렇게 생각했습니다. 그러나 다시 나는 쉘 스크립트를 작성하지 않았습니다. :) 오 글쎄, 어쨌든 내 대답을 찾았습니다. 감사합니다
denormalizer

5
이 질문 중 하나 의심 할 여지없이, 그것은 프로그래밍 질문은 그것을 너무 지역화되지 않으며, 이럴 괜찮
피터

9
이 질문이 주제에서 벗어난 질문 인 이유는 무엇입니까? 경찰은 그 어느 때보 다 미쳤습니다.
Karel Bílek 2013

6
이 질문은 주제에서 약간 벗어 났을 수 있지만 투표율이 높으며 "linux split file at line"이라는 쿼리가있는 검색 엔진의 첫 번째 결과입니다. 따라서 다른 귀중한 답변을 추가 할 수 있도록이 질문을 다시 여는 것이 좋습니다. 또는 최소한 SU에서 가장 관련성이 높은 질문에 대한 링크를 만드십시오.
Antoine Pinsard

답변:


178
file_name=test.log

# set first K lines:
K=1000

# line count (N): 
N=$(wc -l < $file_name)

# length of the bottom file:
L=$(( $N - $K ))

# create the top of file: 
head -n $K $file_name > top_$file_name

# create bottom of file: 
tail -n $L $file_name > bottom_$file_name

또한 다시 생각하면 첫 번째 분할이 두 번째 분할보다 크기 때문에 분할이 작동합니다. Split은 입력의 균형을 마지막 분할에 넣습니다.

split -l 300000 file_name

400k 라인의 입력에 대해 xaa300k 라인과 xab100k 라인으로 출력 됩니다 .


감사. 수퍼 유저에서 비슷한 답변을 찾았습니다. use tail etc 그리고 yes split은 내 예제에서 작동하지만 항상 내 예제가 100K였던 것은 아닙니다.
denormalizer

2
Windows에서이 작업을 수행하려는 및 Cygwin에서 사용하지 않으려면,이 프로젝트는 네이티브는 Win32 바이너리로 모든 필요한 유틸을 제공합니다 - unxutils.sourceforge.net
조나단 힐

15
내가 사용하는 것이 tail -n +L file_name > bottom_file어디 간단하게 L=K+1실행할 필요없이 wc첫째
Hashbrown

2
차라리 sed -n '1,1000p' test.log > top_test.log ; sed '1,1000d' test.log > bottom_test.log. IHMO, 이것은 더 간단하며 총 라인 수를 계산할 필요가 없습니다. 또한 각 명령 실행 사이에 줄이 추가 되어도 작동합니다.
Antoine Pinsard

일부 파일의 경우이 답변은 줄을 남기지 만 Hashbrown이 제안한 편집으로 문제가 해결됩니다.
scharette 2017
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.