Quase lá. Basta colocar as duas referências de coluna próximas uma da outra.
cat logfile | sed 's/|/ /' | awk '{print $1, $8}'
Observe também que você não precisa cat
aqui.
sed 's/|/ /' logfile | awk '{print $1, $8}'
Observe também que você pode dizer awk
que os separadores de coluna são |
, em vez de espaços em branco, para que você também não precise sed
.
awk -F '|' '{print $1, $8}' logfile
Conforme as sugestões de Caleb , se você deseja uma solução que ainda gera o último campo, mesmo se não houver exatamente oito, pode usar $NF
.
awk -F '|' '{print $1, $NF}' logfile
Além disso, se você deseja que a saída retenha os |
separadores, em vez de usar um espaço, é possível especificar os separadores do campo de saída. Infelizmente, é um pouco mais desajeitado do que apenas usar a -F
bandeira, mas aqui estão três abordagens.
Você pode atribuir os separadores de campo de entrada e saída em awk
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, através do -v
sinalizador.
awk -v 'FS=|' -v 'OFS=|' '{print $1, $8}' logfile
ou simplesmente:
awk -F '|' '{print $1 "|" $8}' logfile