입력 파일에서 필요한 줄 번호를 이미 추출했습니다(즉, 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