200줄 파일 중 10~100줄을 새 파일에 넣는 방법

200줄 파일 중 10~100줄을 새 파일에 넣는 방법

200줄의 파일이 있습니다.

10~100줄을 추출해서 새 파일에 넣어야 합니다.

UNIX/Linux에서 이를 어떻게 수행합니까?

사용할 수 있는 명령은 무엇입니까?

답변1

사용sed:

sed -n -e '10,100p' input.txt > output.txt

sed -n방법아니요기본적으로 모든 줄이 인쇄됩니다. -e다음 매개변수가 sed 스크립트로 실행될 것임을 나타냅니다. 10행부터 100행(포함)까지 해당 행을 10,100p인쇄( )하는 것을 의미하는 sed 스크립트입니다 . p그런 다음 출력은 output.txt.

파일이 제안된 것보다 길면 이 버전(댓글에서 제안됨)이 더 빠릅니다.

sed -e '1,9d;100q'

이것은 의미한다삭제라인 1-9,사직하다100번째 줄 이후 나머지 부분을 인쇄합니다. 200줄의 경우 이는 중요하지 않지만 200,000줄의 경우 첫 번째 버전은 인쇄하지 않더라도 여전히 모든 줄을 볼 것입니다. 일반적으로 나는 명시적이기 때문에 첫 번째 버전을 선호하지만, 긴 파일의 경우 이것이 훨씬 더 빠릅니다. 데이터를 가장 잘 아는 것은 사용자입니다.

또는 다음을 조합하여 사용할 수 있습니다 head.tail

tail -n +10 input.txt | head -n 91 > output.txt

이번에는 tail -n +10전체 파일을 10행부터 인쇄하고 head -n 91처음 91행(원본 파일의 최대 100행)을 인쇄합니다. output.txt같은 방식으로 리디렉션됩니다 .

답변2

이건 해야 해

tail -n +10 file.txt | head -n 91 > newfile.txt

답변3

에서 이 작업을 수행하는 경우 vim매우 간단합니다. 파일 이름이 지정되어 src있고 행을 이동하려는 파일이 이라고 가정합니다 dest. 파일 dest이 아직 존재하지 않으면 다음과 같이 생성합니다.

touch dest

그런 다음 open srcand destin vim(이 -p플래그는 탭에서 매개변수를 엽니다):

vim -p src dest

10행으로 이동합니다. 10행에서 100행까지 모두 선택하고 dest포함된 탭으로 전환합니다.

10ggv101ygtp

노트: 101101행의 시작 부분을 선택합니다( \n100행의 끝 부분을 캡처합니다).


이는 분명히 명령줄 도구를 사용하는 것보다 더 복잡한 프로세스이지만 시각적 선택을 제공한다는 이점이 있습니다(따라서 원하는 모든 것을 얻을 수 있음을 확신할 수 있음). 그러나 이것은 또한 좋은 사용 사례처럼 보입니다 awk.

awk 'NR==10, NR==100' src > dest

NR변수를 사용하면 행 수에 따라 패턴 일치를 수행할 수 있습니다. 따라서 위의 명령은 10-100행을 추출한 src다음 셸에서 출력을 dest.

답변4

여러 가지 방법으로 이 작업을 수행할 수 있습니다.

해결책 awk:

$ awk 'NR<10{next};1;NR>100{exit}' file > new_file

일방 perl통행:

$ perl -nle '
    print if $. > 9 and $. < 101;
    exit if $. > 100;
' file > new_file

관련 정보