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
awkem si, no bloco BEGIN.awk 'BEGIN {FS = OFS = "|"} {print $1, $8}' logfile -
Você pode atribuir essas variáveis ao chamar
awkda 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