Se o comando procurar linhas e valores específicos em arquivos

1

Eu imagino que isso é muito simples, mas eu sou realmente novo no Ubuntu. Eu basicamente quero comandar o Ubuntu para olhar através de arquivos com um certo sufixo (QC.fastq.log) e então olhar para um valor na linha 3 em colchetes e então se isso for maior que 0.1 para então completar outro comando.

Então eu tenho isso

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

Alguma idéia?

Um arquivo de exemplo:

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
    
por Samuel Robert Wrench 05.04.2016 / 18:17

2 respostas

1

Esses são alguns requisitos bem hardcore!
Se você conseguir lidar com algo maior que 0,09, isso deve funcionar:

find -name '*QC.fastq.log' -exec sh -c 'sed -n 3p {} && grep -q \(0.0 || echo "DO SOMETHING"' \;
  • Para qualquer arquivo que corresponda ao glob
  • Pegue a terceira linha com sed
  • Se isso NÃO ( || ) corresponder a (0.0 (que será sempre menor que 0,1),
  • Execute o comando.
por Oli 05.04.2016 / 18:39
1

Aqui está um pequeno script de shell fazendo o trabalho:

filemask="*QC.fastq.log"

while read -r -d $'
filemask="*QC.fastq.log"

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