파일에 행 범위 쓰기(1~N) Bash, Awk 또는 Sed 스크립트

파일에 행 범위 쓰기(1~N) Bash, Awk 또는 Sed 스크립트

입력 파일에서 필요한 줄 번호를 이미 추출했습니다(즉, 1부터 N까지). 이제 이 1부터 N까지의 입력 파일을 사용하여 새 파일로 출력할 수 있어야 합니다. 입력 파일에서 행 번호를 추출한 이전 함수에서 발생했습니다. 이제 입력 파일을 사용하여 이 숫자 범위를 가져와 해당 범위를 새 파일로 출력해야 합니다. 새 파일에 대해 1부터 N까지 수행합니다.

저는 현재 bash 스크립트와 Awk를 사용하여 입력 파일에서 범위 데이터를 생성하는 데 필요한 정보를 추출하고 있습니다. 이제 이 분노를 받아들여 1부터 N까지 (입력 파일을 사용하여) 새 파일을 만들어야 합니다.

나는 노력했다

sed -i '1,'"$N" input.txt > input.log

입력 파일 input.txt를 사용하고 1에서 N까지 input.log 파일로 출력하지만 다음 오류가 발생합니다.

sed: -e expression #1, char 3: missing command

위의 코드 줄은 bash 스크립트 안에 있습니다.

답변1

head작업에 가장 적합한 도구인 것 같습니다.

head -n "$N" input.txt > input.log

를 사용할 때 sed접근 방식에 따라 명령을 지정해야 하며 이는 p명령과 -n옵션이 되므로 기본적으로 패턴 공간을 인쇄하지 않습니다.

sed -n "1,${N}p" input.txt > input.log

하지만

sed "$N q" input.txt > input.log

N전체 파일을 읽는 것( 완료된 작업이기도 함 head)보다 첫 번째 줄만 읽고 중지(완료된 작업이기도 함)하는 것이 더 효율적입니다 sed "1,${N}p".

N이러한 방법은 1보다 크거나 같은 경우에만 동일한 출력을 생성합니다. 1보다 작으면 동작이 달라집니다.

답변2

회의

sed "${N}q" file

당신이해야 할 일을합니까?

답변3

M에서 N까지의 라인의 경우(M <= N이라고 가정):

head -n N input.txt | tail -n $(( N - M + 1))

또는

cat input.txt | head -n N | tail -n $(( N - M + 1))

후자 형식은 모든 스트림에서 사용할 수 있습니다.

답변4

일을 더 간단하게 하려면 "따옴표 없이" 큰따옴표를 사용하십시오.

head -$N ex
sed "$N q" ex
sed -n "1,$N p" ex
awk "NR <= $N" ex
perl -ne "print if $. <= $N" ex
grep -m $N . ex

관련 정보