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 src
and dest
in vim
(이 -p
플래그는 탭에서 매개변수를 엽니다):
vim -p src dest
10행으로 이동합니다. 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