如何使用 unix 命令行过滤器丢弃文件的最后 n 行?
这将与以下情况相反tail:tail丢弃前 n 行,但将其余行通过管道传输,但我希望该命令通过管道传输除最后 n 行之外的所有内容。
不幸的是,我没有找到类似的东西 - 也head无济于事。编辑:至少在 Solaris 中它不接受否定论据。
更新:我最感兴趣的是适用于大文件的解决方案,即日志文件,您可能想要检查除了最后几分钟之外发生的情况。
我在查看非常大的文本文件块时遇到问题。这个大约 19 GB 的文件显然太大了,无法通过任何传统方式查看。
我已经尝试过head 1and tail 1( head -n 1and tail -n 1) 以各种方式将两个命令连接在一起(以获取中间部分),但没有运气。我的运行 Ubuntu 9.10 的 Linux 机器无法处理这个文件。
我如何处理这个文件?我的最终目标是在 45000000 和 45000100 线上磨练。
例如我有这个文件:
cat myfile
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
我想打印除前 2 行以外的所有行。输出应该是这样的:
tail -n $(( $(wc -l myfile | awk '{print $1}') - 2 )) myfile
3
4
5
Run Code Online (Sandbox Code Playgroud)
是的,输出是正确的。但是有一个问题,我们在这个示例文件中有 5 行,对吗?如果我在这个命令输出中使用超过 5 个应该是空的,但它不是!!!
tail -n $(( $(wc -l myfile | awk '{print $1}') - NUMBER )) myfile
这个输出应该是空的,但它不是
tail -n $(( $(wc -l myfile | awk '{print $1}') - 8 )) myfile
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
myfile 可以包含 X 行...感谢您的帮助
我想创建一个充满零和随机值的大文件 ~10G。我试过使用:
dd if=/dev/urandom of=10Gfile bs=5G count=10
Run Code Online (Sandbox Code Playgroud)
它创建了一个大约 2Gb 的文件并以退出状态 0 退出。我不明白为什么?
我还尝试使用以下方法创建文件:
head -c 10G </dev/urandom >myfile
Run Code Online (Sandbox Code Playgroud)
但创建它大约需要 28-30 分钟。但我希望它创建得更快。有人有解决方案吗?
此外,我希望创建多个具有相同(伪)随机模式的文件进行比较。有谁知道这样做的方法吗?谢谢
我试图只获取curl命令输出的第一行。(对不起,如果这令人困惑)
比方说,例如,我简单地运行:
# curl http://localhost
<!-- This is the hidden line i want to grab. -->
<!DOCTYPE html>
<html>
<head>
..
..
Run Code Online (Sandbox Code Playgroud)
如果我想要这里输出的第一行,该怎么办,即:
<!-- This is the hidden line i want to grab. -->
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这样的事情,但还没有运气:
# curl http://localhost | head -n 1
# curl http://localhost | sed -n '1!p'
Run Code Online (Sandbox Code Playgroud)
.. 等所有给我垃圾输出,像这样:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- …Run Code Online (Sandbox Code Playgroud) 我尝试在 Bash 脚本中执行以下操作:运行命令(例如tail -f log_file),等待特定输出到达,然后停止命令,并继续执行脚本。
我尝试了以下方法,但没有成功:
tail -f log_file | grep some_text | head -n1
Run Code Online (Sandbox Code Playgroud)
我这样没有输出。
现在,我尝试诊断问题。当我简单地运行tail -n1,然后在终端中输入一些内容时,它会在第一行之后退出。但是,如果我运行以下命令:
grep some_text | head -n1
Run Code Online (Sandbox Code Playgroud)
在这种情况下,在按 CTRL+D 之前我不会得到任何输出,然后它会打印包含 的输入的第一行some_text。
我的问题是,这是为什么?如果head在第一种情况下立即输出第一行,为什么当它从管道获取输入时不输出呢?难道它不应该输出前n行的所有内容,然后退出,向管道的另一端发送 SIGPIPE 信号吗?
我有一些长度为 100 到 300 MB 的文本文件,我想在 Emacs 中查看它们,但是我的 Emacs 在打开和遍历如此大的文件时遇到了一些性能问题。因此,我正在寻找一个简单的实用程序来将文件拆分为可管理的块,比如每个 50 MB,并根据原始名称和一些后缀来命名块以指示它们在序列中的位置。每个块都会在前一个被截断的地方拾取,并且不超过 50 MB,最后一个块可能更短。
是否有任何简单的工具可以在 Linux 计算机上执行此操作,例如 head 或 tail 之类的东西,可以提供多个结果,每个块一个?
例如,给定test.out120 MB 长的文件,将其分成test.out.1前 50 MB、后test.out.250 MB 和test.out.3文件末尾的其余 20 MB。
我可以使用的组合head,并tail得到碎片,但我想一个工具,抽象出这一切,也许是一个Perl脚本或Python脚本有人已经创造了做这样的任务呢?
我有一个大约 3.5 GB 的巨大日志文件,并且想在 10 MB 中间采样随机部分,以便调试我的应用程序正在执行的操作。
我可以使用 head 或 tail 命令来获取文件的开头或结尾,如何从文件中间获取任意部分?我想我可以做类似的事情,head -n 1.75GB | tail -n 10MB但这似乎很笨拙,我需要确定文件中点的行号以获得 1.75GB 和 10MB 的行数。
我有一个非常大的文本文件,我想查看第 2000 行到 2010 行(包括行号)
我知道一种到达那里的迂回方式:
sc -l [file]
cat -n [file] | tail -n [previous result - 2000] | head -n 10
Run Code Online (Sandbox Code Playgroud)
但感觉必须有更好的方法。在那儿?
我正在尝试从具有 6200 万行的文件中导出 100 到 1,000,100 行。到目前为止,我已经找到了这个命令:
head -1100000 input > output
Run Code Online (Sandbox Code Playgroud)
但是 head 不采用偏移选项。
想法?