我有 200 行的文件。
我需要从 10 到 100 中提取行并将它们放入一个新文件中。
你如何在 unix/Linux 中做到这一点?
您可以使用哪些可能的命令?
从巨大的文本文件中提取第 20 -45 行的好方法是什么。当然是非交互的!
所以这是家庭作业,但我不会问具体的家庭作业问题。
我需要使用 head 和 tail 从一个文件中获取不同的行集。所以像第 6-11 行和第 19-24 行一样,将它们都保存到另一个文件中。我知道我可以使用 append 来做到这一点,例如
head -11 file|tail -6 > file1; head -24 file| tail -6 >> file1.
Run Code Online (Sandbox Code Playgroud)
但我认为我们不应该这样做。
有没有一种特定的方法可以组合 head 和 tail 命令然后保存到文件中?
本着与另一个问题相同的精神:cat line X to line Y on a large file:
有没有办法从 Emacs 中打开(并在缓冲区上显示)来自巨大文本文件的一组给定的行(例如 lineX和之间的所有行Y)?
例如,打开并在缓冲区中显示文件中第 57890000 行和 57890010 行之间的所有行 huge.txt
更新: 我对至少可以以只读方式打开行(仅用于显示目的)的解决方案感兴趣,尽管如果我也可以编辑行(并保存到原始文件)会很棒。
我想从一个非常大的文件中提取精确的行。例如,第 8000 行会像这样得到:
command -line 8000 > output_line_8000.txt
Run Code Online (Sandbox Code Playgroud) 从文件中提取由其编号给出的行的最简单方法是什么。例如,我想要 . 的第 666 行somefile。您将如何在终端或 shell 脚本中执行此操作?
我可以看到像head -n 666 somefile | tail -n 1,甚至是一半不正确的解决方案cat -n somefile | grep -F 666,但必须有更好、更快、更强大的解决方案。也许使用更晦涩的 unix 命令/实用程序?
一个相关的问题是here。
我经常需要通过从中间删除几行来编辑大文件。我知道我想删除哪些行,我通常会执行以下操作:
sed "linenum1,linenum2 d" input.txt > input.temp
Run Code Online (Sandbox Code Playgroud)
或通过添加 -i 选项内联。由于我知道行号,是否有避免流编辑并删除特定行的命令?input.txt 可以大到 50 GB。
我将 file.txt 的命令存储在一行中(此命令在控制台中运行时有效),我想在一行中执行它,例如 sh
cat file.txt | eval
Run Code Online (Sandbox Code Playgroud)
缺什么?任何提示?
如果我有包含许多命令的文件(每行一个)并且我只想执行一个命令(一整行)怎么办?我的第一个想法是:
head -n5 | tail -n1 | eval
Run Code Online (Sandbox Code Playgroud) 很简单的问题,但似乎找不到简单的解决方法!
我有一个庞大的文本文件,我只需要大约 150 行。线条真的很长,因此在腻子中查看它有点像一场噩梦。我只想将这些行复制到另一个文件中,以便我可以在编辑器中正确查看它。(我无法在编辑器中查看原始文件,因为我的 Windows 机器无法处理它)。
我想要的行从 2000 行左右开始。
谢谢,
我需要确定文件是否在某一行包含某个正则表达式,如果找到则返回 true(退出 0),否则返回 false。也许我想得太多了,但事实证明我的尝试有点笨拙。我有一个解决方案,但我正在寻找我没有想到的其他解决方案。我可以使用 perl,但我希望尽可能保持这种“轻量级”,因为它在 puppet 执行周期中运行。
这个问题很常见:在 RHEL6 中,screen 的打包方式将终端宽度限制为 80 个字符,除非您取消注释 132 行。此命令检查该行是否已修复:
awk 'NR==132 && /^#termcapinfo[[:space:]]*xterm Z0=/ {x=1;nextfile} END {exit 1-x}' /etc/screenrc
Run Code Online (Sandbox Code Playgroud)
注意:如果文件少于 132 行,它必须以 false 退出。
我认为sed在这里会有帮助,但显然你必须做一些奇怪的技巧,比如空替换和分支。尽管如此,我还是希望看到一个 sed 解决方案来学习。也许还有一些我忽略的东西。
编辑 1:添加nextfile到我的 awk 解决方案中
编辑 2:基准 编辑 3:不同的主机(空闲)。编辑 4:错误地将 Gile 的 awk 时间用于优化运行。编辑 5:新长凳
首先,请注意:wc -l /etc/screenrc是216。不存在线路时的 50k 次迭代,以挂墙时间衡量:
我想知道如何在文件的一行中获取字节数。
我知道我可以wc -l用来获取文件中的行数,以及wc -c获取文件中的总字节数。但是,我想要的是仅在文件的一行中获取字节数。
我怎么能做到这一点?
如果我有一个包含 800 万行的纯文本文件,并且我想将 4,000,010 到 4,000,000 行打印到屏幕上,哪个会更有效率:awk 还是 sed?
文本没有模式,不幸的是,数据库不是一种选择。我知道这并不理想,我只是想知道哪个能更快地完成任务。
或者也许有更好的替代 sed 或 awk 的方法?
从“ cat line x 到 line y on a large file ”的一个小问题:
我有一个巨大的文件(2-3 GB)。我只想从具有“foo:”的行到具有“goo:”的行进行猫/打印。假设“foo:”和“goo:”在一个文件中只出现一次;"foo:" 继续 "goo:"。
到目前为止,这是我的方法:
grep -nr "foo:" bigfile123456: foo: hello world!和654321: goo: good bye!tail -n+123456 bigfile | head -n 530865我的问题是如何用表达式(例如,grep ...)有效地替换行号常量?
我可以编写一个简单的 Python 脚本,但只想使用组合命令来实现它。
sed ×5
awk ×3
head ×3
tail ×3
files ×2
large-files ×2
bash ×1
command-line ×1
emacs ×1
gnu-screen ×1
grep ×1
newlines ×1
performance ×1
pipe ×1
puppet ×1
wc ×1