2012-10-02 13 views
6

Mam przykład [plik], który chcę chwycić linie 3-6 i linie 11-13, a następnie posortuj je za pomocą komendy liniowej i zapisz jako 3_6-11_13. Są to polecenia, których użyłem do tej pory, ale nie uzyskałem pożądanej mocy wyjściowej:wybierz wiele linii za pomocą polecenia linux sed

sed -n '/3/,/6/p'/11/,/13/p file_1 > file_2 | sort -k 2 > file_2 & sed -n 3,6,11,13p file_1 > file_2 | sort -k 2 file_2. 

Czy istnieje lepszy sposób skrócenia tego? Myślałem o używaniu awk, ale jak dotąd przebywałem z sedem.

Odpowiedz

11

Z sed masz prawo do określenia adresów liczby tak:

sed -n '3,6p' 

Numer -n należy przechowywać sed z automatycznego drukowania danych wyjściowych.

Następnie można uruchomić wiele poleceń, jeśli używasz gsed oddzielając te polecenia średnikami:

sed -n '3,6p; 11,13p' | sort -k2 > 3_6-11_13 
+0

Dziękuję Tim Pote. Użyłem nieco zmodyfikowanej wersji tego, co zasugerowałeś. Wcześniej próbowałem tego, co sugerowałeś wcześniej, ale ciągle popełniłem błąd, nie używaj średnika po "3,6p ;. Dzięki jeszcze raz. – demet8

1

sed połączyć wiele poleceń używając opcji -e

$ sed -e 'comm' -e 'comm' file.txt 

czy można oddzielić poleceń za pomocą średnika

$ sed 'comm;comm;comm' file.txt 
+0

Dziękuję b3h3m0th. – demet8

Powiązane problemy