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 +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
src
그런 다음, 및 dest
in을 모두 엽니다 vim
( -p
플래그는 탭에서 인수를 엽니다).
vim -p src dest
열 번째 줄로 이동합니다. 10번째 줄부터 100번째 줄까지 모두 선택하세요. 양키; 포함된 탭으로 전환합니다 dest
. 반죽.
10ggv101ygtp
메모: 101
101번째 줄의 시작 부분을 선택합니다. ( \n
100번째 줄의 끝 부분을 포착합니다.)
이는 분명히 명령줄 도구를 사용하는 것보다 조금 더 복잡한 프로세스이지만 시각적 선택을 제공하는 이점이 있습니다(따라서 원하는 모든 것을 얻을 수 있음을 확신할 수 있음). 그러나 이것은 또한 다음의 훌륭한 사용 사례처럼 보입니다 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