Quase lá. Basta colocar as duas referências de coluna uma ao lado da outra.
cat logfile | sed 's/|/ /' | awk '{print $1, $8}'
Observe também que você não precisa de cat
aqui.
sed 's/|/ /' logfile | awk '{print $1, $8}'
Observe também que você pode informar a awk
que os separadores de coluna são |
, em vez de espaços em branco, portanto você não precisa de sed
.
awk -F '|' '{print $1, $8}' logfile
De acordo com sugestões por Caleb , se você quiser uma solução que ainda produza o último campo, mesmo se não houver exatamente oito, você poderá usar $NF
.
awk -F '|' '{print $1, $NF}' logfile
Além disso, se desejar que a saída retenha os separadores |
, em vez de usar um espaço, você poderá especificar os separadores de campo de saída. Infelizmente, é um pouco mais desajeitado do que apenas usar o -F
flag, mas aqui estão três abordagens.
-
Você pode atribuir os separadores de campos de entrada e saída em
awk
em si, no bloco BEGIN.awk 'BEGIN {FS = OFS = "|"} {print $1, $8}' logfile
-
Você pode atribuir essas variáveis ao chamar
awk
da linha de comando, por meio do sinal-v
.awk -v 'FS=|' -v 'OFS=|' '{print $1, $8}' logfile
-
ou simplesmente:
awk -F '|' '{print $1 "|" $8}' logfile