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 .