Domanda Se il comando controlla linee e valori specifici nei file


Immagino che sia molto semplice ma sono davvero nuovo di Ubuntu. Fondamentalmente voglio comandare a ubuntu di guardare attraverso i file con un certo suffisso (QC.fastq.log) e poi guardare un valore sulla linea 3 in parentesi e poi se è superiore a 0.1 per poi completare un altro comando.

Quindi ho questo

for file in *QC.fastq.log

Do

If [ -e $file ] # this is where I thing the line and bracket command should be

then 

the next command

Qualche idea?

Un file di esempio:

6882 reads; of these:
  6882 (100.00%) were unpaired; of these:
    1088 (15.81%) aligned 0 times
    5792 (84.16%) aligned exactly 1 time
    2 (0.03%) aligned >1 times
84.19% overall alignment rate

1
2018-04-05 16:17


origine


Un esempio del file di input sarebbe utile (specialmente la terza riga!). Se potessi modificare che nella tua domanda sarebbe apprezzato. - Oli♦
Non del tutto sicuro su come incollare un file qui - Samuel Robert Wrench
Non sono sicuro se si tratta solo di refusi nella domanda, ma del tuo do e if non dovrebbe avere lettere maiuscole. - Arronical
1088 (15,81%) allineati 0 volte #line 3, mi interessa il valore tra parentesi. cioè se questo è superiore allo 0,1%, passare al comando successivo. - Samuel Robert Wrench
in Python, questo è molto semplice, o mi manca qualcosa. Python è un'opzione? - Jacob Vlijm


risposte:


Questi sono alcuni requisiti piuttosto impegnativi!
Se riesci a far fronte solo a qualcosa di più grande di 0.09, questo dovrebbe funzionare:

find -name '*QC.fastq.log' -exec sh -c 'sed -n 3p {} && grep -q \(0.0 || echo "DO SOMETHING"' \;
  • Per qualsiasi file che corrisponde al glob
  • Ottieni la terza riga con sed
  • Se ciò NON (||) incontro (0.0 (che sarà sempre inferiore a 0,1),
  • Esegui il comando.

1
2018-04-05 16:39





Ecco un piccolo script di shell che fa il lavoro:

filemask="*QC.fastq.log"

while read -r -d $'\0' file
do
  if [ "$(echo "$(sed -nr "3s/^.*\((.*)%\).*$/\1/p}" "${file}") > 0.1" | bc)" = "1" ]
  then
    echo "${file}" is greater 0.1
  fi
done < <(find . -name "${filemask}" -print0)

1
2018-04-05 17:24



Sì, è sempre una buona idea citare qualsiasi espansione variabile - Non so perché mi manca ancora e ancora. - cmks