200줄 파일에서 10~100줄을 새 파일로 가져오는 방법

200줄 파일에서 10~100줄을 새 파일로 가져오는 방법

200줄의 파일이 있습니다.

10에서 100까지의 줄을 추출하여 새 파일에 넣어야 합니다.

유닉스/리눅스에서는 어떻게 합니까?

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

답변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 +1010행부터 전체 파일을 인쇄하고, 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

src그런 다음, 및 destin을 모두 엽니다 vim( -p플래그는 탭에서 인수를 엽니다).

vim -p src dest

열 번째 줄로 이동합니다. 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

관련 정보