여러 데이터베이스 가치가있는 ~ 23000 행 SQL 덤프가 있습니다. 이 파일의 특정 섹션 (예 : 단일 데이터베이스의 데이터)을 추출하여 새 파일에 배치해야합니다. 원하는 데이터의 시작 및 끝 줄 번호를 모두 알고 있습니다.
16224와 16482 사이의 파일에서 모든 줄을 추출하여 새 파일로 리디렉션하는 유닉스 명령 (또는 일련의 명령)을 아는 사람이 있습니까?
답변
sed -n '16224,16482p;16483q' filename > newfile
로부터 나오지 매뉴얼 :
p- 패턴 공간을 인쇄합니다 (표준 출력으로). 이 명령은 일반적으로 -n 명령 줄 옵션과 함께 사용해야합니다.
n- 자동 인쇄가 비활성화되지 않은 경우 패턴 공간을 인쇄 한 다음 패턴 공간을 다음 입력 라인으로 교체하십시오. 더 이상 입력이 없으면 더 이상 명령을 처리하지 않고 sed가 종료됩니다.
q-
sed
더 이상의 명령이나 입력을 처리하지 않고 종료 합니다. -n 옵션으로 자동 인쇄를 비활성화하지 않으면 현재 패턴 공간이 인쇄됩니다.
sed 스크립트의 주소는 다음 형식 중 하나 일 수 있습니다.
number
줄 번호를 지정하면 입력에서 해당 줄만 일치합니다.주소 범위는 쉼표 (,)로 구분 된 두 주소를 지정하여 지정할 수 있습니다. 주소 범위는 첫 번째 주소가 일치하는 위치부터 시작하여 두 번째 주소가 일치 할 때까지 계속됩니다.
답변
sed -n '16224,16482 p' orig-data-file > new-file
여기서 16224,16482는 시작 줄 번호와 끝 줄 번호입니다. 이것은 1 인덱스입니다. -n
입력을 출력으로 에코하는 것을 억제합니다. 숫자는 다음 명령이 작동하게하는 라인 범위를 나타냅니다. 명령 p
은 관련 행을 인쇄합니다.
답변
머리 / 꼬리를 사용하여 매우 간단합니다.
head -16482 in.sql | tail -258 > out.sql
sed를 사용하여 :
sed -n '16482,16482p' in.sql > out.sql
awk 사용 :
awk 'NR>=10&&NR<=20' in.sql > out.sql
답변
‘vi’를 사용하고 다음 명령을 사용할 수 있습니다.
:16224,16482w!/tmp/some-file
또는
cat file | head -n 16482 | tail -n 258
편집 :-설명을 추가하기 위해 head -n 16482 를 사용 하여 첫 16482 줄을 표시 한 다음 tail -n 258 을 사용 하여 첫 번째 출력에서 마지막 258 줄을 가져옵니다.
답변
다른 접근 방식이 있습니다 awk
.
awk 'NR==16224, NR==16482' file
파일이 크면 exit
마지막으로 원하는 행을 읽은 후 좋을 수 있습니다 . 이렇게하면 불필요하게 다음 줄을 읽지 않습니다.
awk 'NR==16224, NR==16482-1; NR==16482 {print; exit}' file
awk 'NR==16224, NR==16482; NR==16482 {exit}' file
답변
perl -ne 'print if 16224..16482' file.txt > new_file.txt
답변
# print section of file based on line numbers
sed -n '16224 ,16482p' # method 1
sed '16224,16482!d' # method 2