我有一个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
你需要这条线之后什么也或者只是什么之前? –