/ / pridanie premenných kombinovaných s> / <test BASH - bash, awk, grep, porovnanie, pridanie

pridanie premenných v kombinácii s> / <test BASH - bash, awk, grep, porovnanie, pridanie

Snažím sa teda napísať bash skript, aby som skontroloval, či sú všetky hodnoty v množine údajov v rozmedzí určitého rozpätia priemeru.

doteraz:

    #!/bin/bash
cat massbuild.csv
while IFS=, read col1 col2
do
x=$(grep "$col2" $col1.pdb | grep "HETATM" | awk "{ sum += $7; n++ } END { if (n > 0) print sum / n; }")


i=$(grep "$col2" $col1.pdb | grep "HETATM" | awk "{print $7;}")


if $(($i > $[$x + 15])); then
echo "OUTSIDE THE RANGE!"
fi

done < massbuild.csv

Doteraz som to rozdelil podľa komponentov na testovanie a zistil som, že hodnoty x a čítam správne, ale zdá sa, že pridanie 15 až x alebo porovnanie s i nefunguje.

Čítal som okolo seba a som naštvaný = /

odpovede:

0 pre odpoveď č. 1

Bez vzorového vstupu a očakávaného výstupu iba hádame, ale MOŽNO je to správny východiskový bod pre váš skript (samozrejme nevyskúšané, pretože nie je uvedený žiadny vstup / výstup):

#!/bin/bash
awk -F, "
NR==FNR {
file = $1 ".pdb"
ARGV[ARGC] = file
file2col2s[file] = (col1to2s[file] ? file2col2s[file] FS : "") $2
next
}

FNR==1 { split(file2col2s[FILENAME],col2s) }

/HETATM/ {
for (i=1;i in col2s;i++) {
col2 = col2s[i]
if ($0 ~ col2) {
sum[FILENAME,col2] += $7
cnt[FILENAME,col2]++
}
}
}

END {
for (file in file2col2s) {
split(file2col2s[file],col2s)
for (i=1;i in col2s;i++) {
col2 = col2s[i]
print sum[file,col2]
print cnt[file,col2]
}
}
}
" massbuild.csv

0 pre odpoveď č. 2

Pomáha to?

a=4; b=0; if [ "$a" -lt "$(( $b + 5 ))" ]; then echo "a < b + 5"; else echo "a >= b + 5"; fi

Ref: http://www.tldp.org/LDP/abs/html/comparison-ops.html