sed -n 함수가 같은 줄에서 반복적으로 호출됩니다.

sed -n 함수가 같은 줄에서 반복적으로 호출됩니다.

저는 유닉스와 쉘 스크립트 작성에 있어서는 완전한 초보자입니다. 따라서 제 질문에 대한 해결책이 다소 평범하다면 사과드립니다.

그러나 본질적으로 내 쉘 스크립트 "run.x"는 매번 다른 초기 조건을 읽어야 하는데 동일한 초기 조건을 반복적으로 읽고 있습니다. 문제의 코드는 여기에 있습니다. 문제는 sed에 있는 것 같습니다.

실행.x:

./sursec.x < ./sursecout.txt
sed -n '1,2p;3q' sursecout.txt
cd ..
mv ./data ./CJ=3.029990
mkdir data
cd SurSec
./sursec.x < ./sursecout.txt
sed -n '3,4p;5q' sursecout.txt
cd ..
mv ./data ./CJ=3.030659
mkdir data
cd SurSec

따라서 위의 각 코드 블록의 처음 두 줄은 다음 두 줄에서 읽어야 합니다.

Sursecout.txt:

3.029990d0
0.81476d0
3.030659d0
0.81476d0

위 코드의 첫 번째 부분은 각각 3.029990d0, 0.81476d0이어야 하고 다음 부분은 각각 3.030659d0, 0.81476d0이어야 합니다. 이것은 sursecout.txt에서 가져온 초기 조건이며 sursec.x라는 별도의 스크립트를 통해 실행됩니다. 그런 다음 각 프로세스는 "CJ=..." 폴더를 생성하고 여기에 10개의 출력 텍스트 파일을 저장합니다. 내 쉘 스크립트는 총 30개의 프로세스를 실행합니다. 내 문제는 각각 올바른 CJ 값을 가진 30개의 폴더가 있지만 각 폴더에는 정확히 동일한 10개의 출력 파일 세트가 있다는 것입니다. 내 쉘 스크립트는 동일한 프로세스를 30번 반복하는 것 같지만 다른 폴더에 저장합니다.

답변1

내가 이해하는 바에 따르면, 데이터 파일의 각 행 쌍을 읽은 sursec.x다음 data두 행의 첫 번째 값에 가까운 이름으로 결과 디렉토리를 저장하려고 합니다.

while IFS= read -r line1 && IFS= read -r line2          # Read two lines from the datafile
do
    mkdir -p ../data                                    # Create data directory (if necessary)
    printf "%s\n%s\n" "$line1" "$line2" | ./sursec.x    # Feed the two lines to sursec
    target="CJ=${line1%d0}"                             # Prefix "CJ=" and strip trailing "d0"
    mv ../data ../"$target"                             # Rename "data" as "$target"
done < sursecout.txt

자신의 코드가 작동하지 않는 이유는 소스 데이터 파일을 수정하지 않기 때문입니다. 따라서 프로그램은 sursec.x항상 동일한 처음 두 줄을 제공합니다.

프로그램이 상위 디렉토리에 데이터 파일을 생성해야 하는 이유가 무엇인지 약간 혼란스럽습니다 sursec.x. 그러나 이것이 귀하의 예제 코드가 수행하는 작업이기 때문에 제 코드는 여기서도 동일하다고 가정합니다.

관련 정보