considere este arquivo:
#!/usr/bin/env bash
cat > example_file.txt <<EOL
group, value
1, 3.21
1, 3.42
1, 3.5
2, 4.1
2, 4.2
EOL
no script a seguir, agrupo as linhas desse arquivo pelos valores da primeira coluna (os valores da primeira coluna já estão classificados) e imprimo cada grupo em um arquivo txt individual:
var=$(echo 'example_file.txt')
var2=$(echo $var|sed "s/.txt//g")
mkdir -p output
cat $var | awk -v varn="$var2" -F, 'FNR == 1 {header = $0;next} !seen[$1]++ { print header > ("output/"varn"_"$1".txt") }{print > ("output/"varn"_"$1".txt");}'
pergunta
Como imprimir o resultado em um fluxo compactado "output/"varn"_"$1".gz"
(em vez de um arquivo txt descompactado "output/"varn"_"$1".txt"
)?
(portanto, a saída desejada é a mesma que o script produz agora, apenas quero que os arquivos de saída sejam compactados e salvos em .txt.gz
vez de texto simples, como o código faz agora).
(Tentei usar gzip >
dentro dos {print}
blocos mas sem sucesso :(
(PS, eu sou um pouco noob e awk e, portanto, a pergunta pode ser realmente idiota.)
Você pode canalizar para comandos em GNU awk's
print
. Do manual GNU awk :Então:
Por exemplo: