我有一個300MB的sql轉儲,在特定的行上給我一個錯誤。輸出特定行巨大的文本文件
但該行位於文件的中間。什麼是最好的方法?
head -n middleLine dump.sql > output
?
或者我可以只輸出我需要的線?
我有一個300MB的sql轉儲,在特定的行上給我一個錯誤。輸出特定行巨大的文本文件
但該行位於文件的中間。什麼是最好的方法?
head -n middleLine dump.sql > output
?
或者我可以只輸出我需要的線?
你可以使用sed -n -e 123456p your.dump
打印線123456
太棒了!謝謝。我實際上使用'sed -n 123,130p my.dump'來輸出行範圍! – balsagoth
也許這只是我,但在我看來,糟糕的風格,跳過'-e'。我也經常在'-e'之後引用sed命令,因爲它經常包含各種奇怪的:-)字符......我會寫它'sed -n -e'123,130 p'my.dump'。 – 2011-11-17 12:30:16
您可以使用SED:
sed -n "x p" dump.sql
其中x
是行號。
如果您知道該行上我會用grep
的短語。如果短語 「ERRORTEXT」 使用:
$ cat dump.sql | grep "errortext"
這不是我所要求的。這將輸出文件中的每個「errortext」,而不是我需要輸出的行。 – balsagoth
超過貓| grep無用,而grep也可以處理文件。查看http://partmaps.org/era/unix/award.html –
如果文件很長,可以考慮使用
sed -n 'X{p;q}' file
其中X是行號。它將在到達該行後停止讀取文件。
+1,找到該行後退出。 –
在某些系統上,如osx,它需要一個額外的分號:'sed -n'X {p; q;}'文件' – LopSae
這可能會爲你工作:
sed 'X!d;q' file
其中X是行號。
如果sed
太慢供你品嚐,你也可以使用
cat $THE_FILE | head -n $DESIRED_LINE | tail -n 1
如果我運行類似於:「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」,並且與head -n 10 |相比較tail -n 1,sed在我的系統中速度更快。 – desgua
這也可以用Perl完成:
perl -wnl -e '$. == 4444444 and print and exit;'
4444444是要打印的行號。
請注意,一旦打印行,該文件應該關閉,因此您不會繼續閱讀它。
您也可以嘗試像awk
:
awk 'NR==YOUR_LINE_NO{print}' file_name
你需要這條線之後什麼也或者只是什麼之前? –