Usar sed / awk para recuperar el primer token "no whitspace" en cada línea

Tengo un gran file de N-Triples / N-Quads
Quiero quedarme con una colección de temas únicos.
En files más pequeños podría haberlo logrado usando: awk '{print $1}' | uniq awk '{print $1}' | uniq pero awk falla para líneas de files grandes. (varios MB).

¿Cómo puedo lograr algo similar con sed / grep -o / etc '…?

EDITAR:

awk falla con: awk: program limit exceeded: maximum number of fields size=32767 FILENAME="file.nq" FNR=308254 NR=308254

[actualización] Algunas líneas tienen demasiados campos (separados por espacios en blanco). Pruebe grep lugar de awk :

 grep -E -o '^[^[:space:]]+' your_input_file | uniq 

Aconsejaría no usar sed para esto, ya que haría mucho trabajo extra en cada línea (para eliminar el final de la línea) en un file muy grande. Lo mismo para awk : el análisis de líneas no es necesario.

Con sed :

 sed 's/^ *\([^ ]*\) .*$/\1/g' | uniq 

Esto reemplaza cada línea con la primera secuencia de no espacios.

Una variante más rápida usando dos grep s (para manejar líneas con espacios iniciales, como lo hace AWK):

 grep -o "^[[:space:]]*[^[:space:]]*" | grep -o "[^[:space:]]*" | uniq 

Respondiendo a la pregunta editada, con long lines .

Un truco que puedes usar para este caso es usar tr para intercambiar espacios y nuevas líneas. Hay varias forms de get el primer logging de la primera línea. Su problema se convierte en encontrar líneas que contienen un espacio

  { echo # output a newline to get the first record cat file } | tr ' \n' '\n ' | sed -n '/ /s/.* //p' 

O

  tr ' \n' '\n ' < file | sed -ne '1p' -e '/ /s/.* //p' 

La idea es que cambies

 this is a long line and this is another 

a

 this is a long line and this is another 

entonces las herramientas con límites de longitud de línea no tienen problemas. Si tiene caracteres de tabulación entre los campos, entonces probablemente quiera tr ' \t\n' '\n\n '