AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1066499
Accepted
user2413
user2413
Asked: 2018-08-19 00:34:22 +0800 CST2018-08-19 00:34:22 +0800 CST 2018-08-19 00:34:22 +0800 CST

awk: pipe output de (condicional) print to gzip

  • 772

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.gzvez 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.)

command-line bash awk
  • 1 1 respostas
  • 3813 Views

1 respostas

  • Voted
  1. Best Answer
    muru
    2018-08-19T00:54:33+08:002018-08-19T00:54:33+08:00

    Você pode canalizar para comandos em GNU awk's print. Do manual GNU awk :

    print items | command
    

    É possível enviar a saída para outro programa através de um pipe em vez de um arquivo. Esse redirecionamento abre um pipe para o comando e grava os valores dos itens por meio desse pipe para outro processo criado para executar o comando.

    O argumento de redirecionamento commandé na verdade uma expressão awk. Seu valor é convertido em uma string cujo conteúdo fornece o comando shell a ser executado. Por exemplo, o seguinte produz dois arquivos, uma lista não classificada de nomes de pessoas e uma lista classificada em ordem alfabética reversa:

    awk '{ print $1 > "names.unsorted"
           command = "sort -r > names.sorted"
           print $1 | command }' mail-list
    

    Então:

    awk -v varn="$var2" -F, 'FNR == 1 {header = $0;next}
      !seen[$1]++ { print header | "gzip > "output/"varn"_"$1".gz" }
      {print | "gzip > output/"varn"_"$1".gz";}'
    

    Por exemplo:

    % echo 1 2 | awk '{print $2 | "gzip > "$1".gz"}'
    % zcat 1.gz 
    2
    
    • 7

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve