Executando múltiplos comandos awk em um arquivo

0

Estou tentando extrair linhas de um arquivo e salvar a saída em um novo arquivo.

Eu tenho usado o código:

cat datafile | awk -f pullhh.txt > fuel

em que o arquivo pullhh.txt contém o código /FUELHH/

Eu quero extrair linhas contendo a palavra FUELHH e salvá-las em um arquivo e, em seguida, extrair linhas contendo FUELINST e salvá-las em um arquivo separado.

Existe uma maneira de fazer isso com os dois comandos no arquivo pullhh.txt ?

    
por Jennifer 15.01.2013 / 15:31

3 respostas

4

Editar: para imprimir em arquivos separados:

/FUELHH/   {print > "fuelhh.txt"}
/FUELINST/ {print > "fuelinst.txt"}

Como pullhh.txt é na verdade um script awk, a extensão txt é enganosa. Use algo como extract_lines.awk e, em seguida:

awk -f extract_lines.awk datafile
    
por 15.01.2013 / 16:09
1

desde que você queira desviar a saída para 2 arquivos diferentes, sugiro o seguinte (para executar via opção -f awk).

BEGIN {
    while (getline line < "datafile" > 0) {
        if (match(line, "FUELHH"))   print line > "file1"
        if (match(line, "FUELINST")) print line > "file2"
    }
}

solução mais curta:

{
    if (match($0, "FUELHH"))   print > "file1"
    if (match($0, "FUELINST")) print > "file2"
}
    
por 15.01.2013 / 17:31
0

Tudo que você precisa é de um forro único, nenhum arquivo de script é necessário:

awk '/FUELHH/{print > "fuelhh.txt"}/FUELINST/{print}' datafile > fuelinst.txt
    
por 16.01.2013 / 12:56

Tags