sed를 사용하여 파일의 일부를 다른 파일로 추출

sed를 사용하여 파일의 일부를 다른 파일로 추출

데이터 파일의 일부를 추출하여 다른 파일에 저장하는 스크립트를 작성하고 싶습니다. 스크립트를 작성했지만 일부 오류가 발생합니다. 스크립트는

#!/bin/bash

nn=0
mn=0

for var1 in 1 2 3 ; do
    nn=nn+2
    mn=mn+302

    sed -n '$nn','$mn'p  dos.dat > $var1.dat

    nn=mn
done

답변1

스크립트의 즉각적인 문제는 변수가 작은따옴표로 묶여 있어 셸에서 확장할 수 없다는 것입니다.

sed -n '$nn','$mn'p dos.dat > $var1.dat

어쩌면 당신은 이것을 의미하는 것 같습니다

sed -n "$nn,${mn}p" dos.dat > $var1.dat

두 번째 변수가 {및 로 구분되는 경우 }이를 및 와 구분하세요 p.

또한 표현식 구문도 문제입니다. "=" 오른쪽에 있는 변수의 값을 얻으려면 "$"가 필요합니다. '$(('를 사용하지 않거나 이를 처리하지 않으면 expr오른쪽은 숫자가 아닌 문자열일 뿐입니다.

어쩌면 다음과 같은 뜻일 수도 있습니다.

#!/bin/bash

nn=0 ; mn=0
for var1 in 1 2 3 ; do
    nn=$(($nn+2))
    mn=$(($mn+302))

    sed -n "$nn,${mn}p" dos.dat > $var1.dat

    nn=$mn
done

~에 따르면POSIX, 여기서 '$' $((는 필요하지 않습니다. 다음 중 하나를 수행합니다.

쉘 변수인 경우x선택적으로 앞의 더하기 또는 빼기 기호를 포함하고 그 뒤에 산술 확장이 오는 유효한 정수 상수를 형성하는 값을 포함합니다."$((x))"그리고"$(($x))"동일한 값을 반환해야 합니다.

관련 정보