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
옵션은 awk
awk에서 외부 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
이건 좀 과할 수도 있을 것 같은데