code

cygwin에서 시작 및 끝 줄 번호를 기준으로 텍스트 파일을 자르는 (잘라 내기) 방법은 무엇입니까?

codestyles 2021. 1. 10. 17:17
반응형

cygwin에서 시작 및 끝 줄 번호를 기준으로 텍스트 파일을 자르는 (잘라 내기) 방법은 무엇입니까?


각각 100MB 정도의 로그 파일이 거의 없습니다. 개인적으로 그런 큰 파일을 처리하는 것은 번거 롭습니다. 나에게 흥미로운 로그 라인은 200에서 400 라인 정도 밖에되지 않는다는 것을 알고 있습니다.

이 파일에서 관련 로그 행을 추출하는 좋은 방법은 무엇입니까? 즉, 행 번호 범위를 다른 파일로 파이프하고 싶습니다.

예를 들어 입력은 다음과 같습니다.

filename: MyHugeLogFile.log
Starting line number: 38438
Ending line number:   39276

cygwin cat에서 해당 파일의 해당 범위 만 벗어나 도록 실행할 수있는 명령이 있습니까? 어떻게 든 stdout에 해당 범위를 표시 할 수 있다면 출력 파일로 파이프 할 수도 있습니다.

참고 : Linux가시성을 높이기 위해 태그를 추가 하지만 cygwin에서 작동 할 수있는 솔루션이 필요합니다. (보통 리눅스 명령은 cygwin에서 작동합니다).


직업처럼 들립니다 sed:

sed -n '8,12p' yourfile

...의 8 ~ 12 행 yourfile을 표준 출력으로 보냅니다 .

줄 번호를 앞에 추가하려면 cat -n먼저 다음 을 사용할 수 있습니다 .

cat -n yourfile | sed -n '8,12p'

wc -l총 줄 수를 계산하는 사용할 수 있습니다 .

그런 다음 결합 할 수 있습니다 head그리고 tail당신이 원하는 범위에서 얻을 수 있습니다. 로그가 40,000 줄이고 마지막 1562 줄을 원하고 그 중 처음 838 줄을 원한다고 가정 해 봅시다. 따라서 :

tail -1562 MyHugeLogFile.log | head -838 | ....

또는 아마도 사용하는 쉬운 방법이 sedawk.


10 만 줄의 파일로 파일을 분할하려고 할 때이 스레드를 보았습니다. sed보다 더 나은 솔루션은 다음과 같습니다.

split -l 100000 database.sql database-

다음과 같은 파일을 제공합니다.

database-aaa
database-aab
database-aac
...

그리고 단순히 파일의 일부를 잘라 내고 싶다면 (예 : 26 행에서 142 행까지) 새 파일에 입력하십시오. cat file-to-cut.txt | sed -n '26,142p' >> new-file.txt


이것은 어떤가요:

$ seq 1 100000 | tail -n +10000 | head -n 10
10000
10001
10002
10003
10004
10005
10006
10007
10008
10009

그것은 사용 tail이후 다음 10,000 라인의 출력과 head10 개 라인을 유지.

다음과 같은 (거의) 결과 sed:

$ seq 1 100000 | sed -n '10000,10010p'
10000
10001
10002
10003
10004
10005
10006
10007
10008
10009
10010

이것은 라인 범위를 직접 입력 할 수 있다는 장점이 있습니다.


마지막 X 줄 에만 관심이 있다면 다음과 같이 "tail"명령을 사용할 수 있습니다.

$ tail -n XXXXX yourlogfile.log >> mycroppedfile.txt

그러면 로그 파일의 마지막 XXXXX 줄이 "mycroppedfile.txt"라는 새 파일에 저장됩니다.


이것은 오래된 스레드이지만 아무도 grep을 언급하지 않은 것에 놀랐습니다. -A 옵션을 사용하면 검색 일치 후 인쇄 할 행 수를 지정할 수 있으며 -B 옵션은 일치 전 행을 포함합니다. 다음 명령은 "mylogfile.log"파일에서 "my search string"발생 앞과 뒤에 10 줄을 출력합니다.

grep -A 10 -B 10 "my search string" mylogfile.log

If there are multiple matches within a large file the output can rapidly get unwieldy. Two helpful options are -n which tells grep to include line numbers and --color which highlights the matched text in the output.

If there is more than file to be searched grep allows multiple files to be listed separated by spaces. Wildcards can also be used. Putting it all together:

grep -A 10 -B 10 -n --color "my search string" *.log someOtherFile.txt

ReferenceURL : https://stackoverflow.com/questions/5683367/how-to-cropcut-text-files-based-on-starting-and-ending-line-numbers-in-cygwin

반응형