2011-11-17 26 views
26

Mam zrzut sql z 300mb, który daje mi błąd na konkretnej linii.Wyjściowy plik tekstowy dużego wiersza wyjściowego

Ale ta linia znajduje się pośrodku pliku. Jakie jest najlepsze podejście?

head -n middleLine dump.sql > output?

Czy mogę wydrukować tylko tę linię, której potrzebuję?

+0

ty potrzebujesz, co jest po tej linii, jak również, czy tylko co wcześniej? –

Odpowiedz

33

Można użyć sed -n -e 123456p your.dump drukowanie wiersza 123456

+0

świetnie! Dziękuję Ci. Używam 'sed -n 123,130p my.dump' do wyprowadzania linii! – balsagoth

+2

Może to tylko ja, ale wydaje mi się, że nie pasuje do '-e'. Regularnie cytuję także polecenie sed po '-e', ponieważ często zawiera ono różne dziwne :-) znaki ... Napisałem to" sed -n -e "123,130 p 'my.dump'. –

3

Można użyć sed:

sed -n "x p" dump.sql 

gdzie x jest numer linii.

-4

Jeśli znasz frazę na tej linii użyłbym grep. Jeśli wyrażenie jest "errortext" Zastosowanie:

$ cat dump.sql | grep "errortext" 
+0

to nie jest to, o co pytam. Spowoduje to wypisanie każdego "errortext" pliku, a nie linii, której potrzebuję danych wyjściowych. – balsagoth

+0

Więcej o kota | grep jest bezużyteczny, podczas gdy grep może również obsługiwać pliki. Zobacz http://partmaps.org/era/unix/award.html –

22

Jeśli plik jest długi, należy rozważyć użycie

sed -n 'X{p;q}' file 

gdzie X to numer linii. Przestanie czytać plik po osiągnięciu tej linii.

+4

+1 za rzucenie po znalezieniu linii. –

+4

W niektórych systemach, takich jak osx, potrzebuje dodatkowego średnika: 'sed -n 'X {p; q;}' file' – LopSae

2

To może pracować dla Ciebie:

sed 'X!d;q' file 

gdzie X to numer linii.

4

Jeśli sed jest zbyt powolne dla smaku można również użyć

cat $THE_FILE | head -n $DESIRED_LINE | tail -n 1 
+1

Jeśli uruchomię coś w rodzaju:" started = 'date +% s% 3N'; for i in {1..500}; do echo "$ longlist" | sed -n 10p; done; stoped = 'date +% s% 3N'; echo" scale = 3; ($ stoped - $ started)/1000 "| bc" i porównaj z tym samym, ale z head -n 10 | tail -n 1, sed jest szybszy w moim systemie. – desgua

3

Można to również zrobić z Perl:

perl -wnl -e '$. == 4444444 and print and exit;' 

4444444 jest numer linii, które chcesz wydrukować.

Należy pamiętać, że plik powinien zostać zamknięty po wydrukowaniu linii, aby użytkownik nie kontynuował jej czytania.

2

Możesz także spróbować awk jak:

awk 'NR==YOUR_LINE_NO{print}' file_name 
Powiązane problemy