com awk
:
awk 'NF{NF-=1};1' <in >out
ou:
awk 'NF{NF--};1' <in >out
ou:
awk 'NF{--NF};1' <in >out
Embora isso pareça um vodu, funciona. Existem três partes para cada um desses comandos awk.
O primeiro é NF
, que é uma pré-condição para a segunda parte. NF
é uma variável que contém o número de campos em uma linha. No AWK, as coisas são verdadeiras se não forem 0 ou se a string vazia ""
. Portanto, a segunda parte (em que NF
é diminuído) só acontece se NF
não for 0.
A segunda parte ( NF-=1
NF--
ou --NF
) está subtraindo apenas uma da variável NF
. Isso impede que o último campo seja impresso, porque quando você altera um campo (removendo o último campo nesse caso), awk
re-construct $0
concatena todos os campos separados por espaço por padrão. $0
não continha mais o último campo.
A parte final é 1
. Não é mágico, é apenas usado como uma expressão que significa true
. Se uma expressão awk
for avaliada como verdadeira sem nenhuma ação associada, a ação awk
padrão será print $0
.