2011-11-28 12 views
20

Estoy tratando de obtener la primera columna de salida de comunicación usando awk. leí que la lengüeta se utiliza como separador de comunicación por lo que hice:¿Cómo obtener la primera columna de salida de comunicación?

awk -F"\t" '{print $1}' comm-result.txt 

Con Comm-Result.txt que contiene el resultado de:

comm -3 file1 file2 

pero esto no parece funcionar.

Este comentario también toma el carácter de espacio como separador y obtengo resultados extraños cuando mis archivos contienen múltiples espacios.

¿Cómo solo puedo obtener la primera columna de comm?

Respuesta

26

"Así que estoy tratando de conseguir la primera columna de la salida de comunicaciones"

La primera columna de la "comm file1 file2" salida contiene líneas únicas a la file1. Puede omitir el postproceso simplemente llamando al comm con -2 (suprima las líneas exclusivas de file2) y -3 (suprima las líneas que aparecen en ambos archivos).

comm -2 -3 file1 file2 # will show only lines unique to file1 

Sin embargo, si usted no tiene más remedio que procesar una salida de pre-correr de comm entonces como Carl mentioned, cut sería una opción:

cut -f1 comm-results.txt 

Sin embargo, este resultado en vacío líneas para casos donde la columna 1 está vacía. Para hacer frente a esto, tal vez awk puede ser más adecuado:

awk -F"\t" '{if ($1) print $1}' comm-results.txt 
    ---- ---------------- 
     |      | 
    Use tab as delimiter  | 
          +-- only print if not empty 
+0

Muchas gracias, no estaba al tanto de las opciones -1 y -2, pensé que tenía que procesar el resultado. – Daddou

+1

De nada. Yo tampoco lo sabía, hasta que busqué la página del manual. –

7

cut(1) es probablemente una mejor opción que awk para este problema.

+0

¿Puedes dar un ejemplo? –

+0

@JasonThompson, ya hay un ejemplo en la respuesta aceptada. Si está buscando algo más, ¿tal vez debería hacer una nueva pregunta? –

+0

Ah ... lo veo ahora. Lo extrañé mientras escaneaba las respuestas. –

3

Usted puede utilizar comm con -2 y -3 (como already explained above), o utilizar comm con grep como:

grep -o '^\S\+' <(comm file1 file2) 

lo que la salida ganó No contiene ningún espacio final. Esto es útil para comandos que no sean comm.

+1

¡Funciona muy bien en ps output con solo un pequeño ajuste! 'ps -A | nodo grep | grep -o '^ \ s * \ S \ +' ' –

Cuestiones relacionadas