Con awk:
awk 'NF{NF-=1};1' <in >out
o:
awk 'NF{NF--};1' <in >out
o:
awk 'NF{--NF};1' <in >out
Aunque esto parece vudú, funciona. Hay tres partes en cada uno de estos comandos awk.
La primera es NF, que es una condición previa para la segunda parte. NFes una variable que contiene el número de campos en una línea. En AWK, las cosas son ciertas si no son 0 o una cadena vacía "". Por lo tanto, la segunda parte (donde NFse disminuye) solo ocurre si NFno es 0.
La segunda parte (ya sea NF-=1 NF--o --NF) está restando uno de la NFvariable. Esto evita que se imprima el último campo, porque cuando cambia un campo (eliminando el último campo en este caso), awkreconstruya $0, concatene todos los campos separados por espacio de forma predeterminada. $0ya no contenía el último campo.
La parte final es 1. No es mágico, solo se usa como una expresión que significa true. Si una awkexpresión se evalúa como verdadera sin ninguna acción asociada, la awkacción predeterminada es print $0.