说我有一个巨大的文本文件(> 2GB),我只是想cat
行X
至Y
(如57890000至57890010)。
据我所知,我可以通过管道head
输入tail
或反之亦然来做到这一点,即
head -A /path/to/file | tail -B
Run Code Online (Sandbox Code Playgroud)
或者
tail -C /path/to/file | head -D
Run Code Online (Sandbox Code Playgroud)
其中A
、B
、C
和D
可以根据文件中的行数计算得出,X
和Y
。
但是这种方法有两个问题:
A
,B
,C
和D
。pipe
相互发送比我感兴趣的多得多的行(例如,如果我只读取大文件中间的几行)有没有办法让 shell 只使用并输出我想要的行?(同时仅提供X
和Y
)?
我有一个相当大的文件(35Gb),我想就地过滤这个文件(即我没有足够的磁盘空间来存放另一个文件),特别是我想 grep 并忽略一些模式 - 有没有办法在不使用其他文件的情况下执行此操作?
假设我想过滤掉所有包含foo:
例如...
我有一个 67GB 的 .csv 文件(我知道...我知道...)
我需要从文件中删除第 4,125,878 行,因为它已损坏。我的 CSV 解析工具不会忽略或跳过它。
我可以用sed
做类似的东西
sed '4125878d' in.csv > out.csv
但就时间和磁盘空间而言,这将是一项非常昂贵的操作。
如果我使用sed -i '4125878d' in.csv
,则操作需要很长时间。
有没有办法可以快速从一个大文件的中间删除一行?