Como faço para encontrar um intervalo de números no conteúdo do arquivo e mover arquivos contendo o intervalo de números para outro diretório?

0

Ok, eu tenho cerca de 90 arquivos, cada um com um corpo como

187942           78.9

Eu quero filtrar os arquivos que têm os valores entre 70 a 90 na segunda coluna e movê-los para outro diretório.

    
por Sophie N 15.03.2016 / 08:47

2 respostas

2

Você pode usar um script pequeno com awk para distinguir arquivos bons / ruins. Por exemplo, algo como o seguinte:

#!/bin/bash
mkdir -p another-directory
for f in * ; do 
    if ! awk '$2>=70 && $2<=90 { exit 1; }' "$f" ; then
        mv -- "$f" another-directory/
    fi
done

A chave aqui é que exit 1 é uma saída de falha, portanto, a frase de condição com awk descobre a presença de uma linha em que o segundo token é um número entre 70 e 90 (inclusive). Caso contrário, awk sai normalmente, com sucesso. O ponto de exclamação nega, fazendo a condição ser verdadeira quando o arquivo tem uma boa linha, e false caso contrário.

    
por 15.03.2016 / 10:43
0

Usando awk :

awk '$2>70&&$2<90&&!a[FILENAME]++{printf("%s%c",FILENAME,0)}' * | xargs -0 cp -vt target/ --

Explicação:

  • $2>70&&$2<90 da condição.
  • !a[FILENAME]++ será verdadeiro se o nome do arquivo for único (o nome do arquivo será impresso apenas uma vez).
  • printf("%s%c",FILENAME,0) imprime o nome do arquivo com o delimitador de byte nulo, para lidar com nomes de arquivos especiais.
  • xargs -0 lê os nomes de arquivos delimitados por byte nulo.
  • cp -vt target/ -- copia os arquivos para o diretório target/ .
por 15.03.2016 / 10:59