awk를 사용하여 루프 인덱스를 파일로 인쇄하는 방법은 무엇입니까?

awk를 사용하여 루프 인덱스를 파일로 인쇄하는 방법은 무엇입니까?

awk를 사용하여 루프 인덱스를 파일로 인쇄해야 합니다. 이것이 내가 사용하는 코드입니다.

echo "Write the start and end file number:"
read sta end
echo "$sta" "$end"
for (( c="$sta"; c<="$end"; c++ ))
do
  echo "$c"
  awk '{if (NR < 15 && $8 >0.48 && $8 <0.52 && $9 >0.48 && $9 <0.52 && $10 >0.48 && $10 <0.52) {print $1 " " $8 " " $9 " " $10}}' RD00$c/MergerHalos.out >> center_raw.dat
done

열 값 1, 8, 9, 10 외에 다음 값을 써야 합니다.

center_raw.dat에.

답변1

귀하의 요구 사항이 무엇인지 잘 모르겠지만 아래에서 추론할 수 있는 것은 귀하의 요구 사항인 것 같습니다.

awk -v var="$c" '{if (NR < 15 && $8 >0.48 && $8 <0.52 && $9 >0.48 && $9 <0.52 && $10 >0.48 && $10 <0.52) {print var ":" $1 " " $8 " " $9 " " $10}}' RD00$c/MergerHalos.out >> center_raw.dat

-v옵션은 awkawk에서 외부 bash 변수의 값을 전달하는 데 사용됩니다.

답변2

스타일에 맞게 빠르게 다시 작성(건조기)

for (( c=sta; c<=end; c++ )); do
    awk -v c=$c '
        NR == 15 {exit}
        function ok(val) {return (0.48 < val && val < 0.52)}
        ok($8) && ok($9) && ok($10) {print c, $1, $8, $9, $10}
    ' RD00$c/MergerHalos.out
done >> center_raw.dat

답변3

내 생각엔 당신이 모든 것을 awk에서 할 수 있을 것 같아

 awk '
 function readfile(i){
    file="RD00"i"/MergerHalos.out"
    while ( (getline < file) > 0) {
    if(NR < 15 && $8 >0.48 && $8 <0.52 && $9 >0.48 && $9 <0.52 && $10 >0.48 && $10 <0.52)
            print i":"$1,$8,$9,$10 > center_raw.dat
        }
        close(file)
}

BEGIN{
    sta=ARGV[1]
    end=ARGV[2]
    ARGC=0
    while(end>sta){print end;readfile(end--)}
}' $start $end

이건 좀 과할 수도 있을 것 같은데

관련 정보