2011-11-28 11 views
20

Próbuję więc uzyskać pierwszą kolumnę wyjścia komunikacyjnego przy użyciu awk. Czytałem, że karta została wykorzystana jako separatorem komunikator tak zrobiłem:Jak uzyskać pierwszą kolumnę danych wyjściowych komunikatora?

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

Z Comm-Result.txt będący wynikiem zawierającego wyjście:

comm -3 file1 file2 

Ale to nie wydają się działać.

To polecenie przyjmuje również znak spacji jako separator i otrzymuję dziwne wyniki, gdy moje pliki zawierają wiele spacji.

Jak mogę uzyskać tylko pierwszą kolumnę od comm?

Odpowiedz

26

„Więc staram się uzyskać pierwszą kolumnę wyjściu łączności”

Pierwsza kolumna „comm file1 file2” wyjście zawiera linie unikatowe dla file1. Możesz pominąć przetwarzanie końcowe, wywołując comm z -2 (pomiń linie unikalne dla file2) i -3 (pomiń linie, które pojawiają się w obu plikach).

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

Jednakże, jeśli nie masz wyboru, ale do procesu pre-run wyjście comm następnie jako Carl mentioned, cut byłaby opcja:

cut -f1 comm-results.txt 

Jednak ten wynik w pusty wiersze dla przypadków, w których kolumna 1 jest pusta. Aby poradzić sobie z tym, może awk może być bardziej odpowiedni:

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

Wielkie dzięki, nie wiedziałem o opcjach -1 i -2, myślałem, że muszę przetworzyć wynik. – Daddou

+1

Nie ma za co. Nie wiedziałem o tym, dopóki nie spojrzałem na stronę mana. –

7

cut(1) jest prawdopodobnie lepszym wyborem niż awk dla tego problemu.

+0

Czy możesz podać przykład? –

+0

@JasonThompson, istnieje już przykład w zaakceptowanej odpowiedzi. Jeśli szukasz czegoś innego, może powinieneś zadać nowe pytanie? –

+0

Ah ... Teraz to widzę. Tęskniłem za tym, przeglądając odpowiedzi. –

3

Można użyć comm z -2 i -3 (jak already explained above) lub użyj comm z grep jak:

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

więc wyjście wygrał nie zawierają żadnych spacji końcowych. Jest to przydatne w przypadku poleceń innych niż comm.

+1

Działa bardzo dobrze na wyjściu PS z odrobiną podkręcania! 'ps -A | grep node | grep -o '^ \ s * \ S \ +' ' –