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 vodu, ele funciona. Existem três partes para cada um desses comandos do 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 string vazia ""
. Portanto, a segunda parte (onde NF
é decrementada) só acontece se NF
não for 0.
A segunda parte ( NF-=1
NF--
ou --NF
) está apenas subtraindo uma da NF
variável. Isso impede que o último campo seja impresso, porque quando você altera um campo (removendo o último campo neste caso), awk
recria $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 awk
expressão for avaliada como verdadeira sem nenhuma ação associada, a awk
ação padrão será print $0
.