【问题标题】:How to file split at a line number [closed]如何在行号处拆分文件[关闭]
【发布时间】:2011-03-05 06:17:23
【问题描述】:

我想从一个特定的行号拆分一个 400k 行长的日志文件。

对于这个问题,让我们将其设为任意数字 300k。

是否有允许我执行此操作的 linux 命令(在脚本中)?

我知道split 让我可以按大小或行号将文件分成相等的部分,但这不是我想要的。我想要一个文件中的前 300k 和第二个文件中的最后 100k。

任何帮助将不胜感激。谢谢!

再想一想,这将更适合超级用户或服务器故障站点。

【问题讨论】:

  • 我认为这个问题在这里很好。你有一个编程任务,你正试图用一个 shell 脚本来解决;如果它是使用广泛可用的 Unix 工具的单线器,那就更好了!
  • 我也是这么想的。但话又说回来,我不是在写一个 shell 脚本 :) 哦,好吧,反正找到了我的答案。谢谢
  • 这个问题很好,毫无疑问,这是一个编程问题,也不是太本地化
  • 为什么这是一个离题的问题?思想警察比以往任何时候都更疯狂。
  • 虽然这个问题可能有点离题,但它的投票率很高,并且是搜索引擎中第一个搜索“linux split file at line”这样的问题的结果。因此,我建议重新打开这个问题,以便可以添加其他有价值的答案。或者至少链接到 SU 上最相关的问题。

标签: linux shell split filesplitting


【解决方案1】:
file_name=test.log

# set first K lines:
K=1000

# line count (N): 
N=$(wc -l < $file_name)

# length of the bottom file:
L=$(( $N - $K ))

# create the top of file: 
head -n $K $file_name > top_$file_name

# create bottom of file: 
tail -n $L $file_name > bottom_$file_name

另外,再想一想,拆分将适用于您的情况,因为第一个拆分大于第二个拆分。 split把输入的余额放到最后一个split中,所以

split -l 300000 file_name

将输出xaa 300k 行和xab 100k 行,输入400k 行。

【讨论】:

  • 谢谢。在超级用户 ie 上找到了一个类似回答的问题。使用 tail 等,是的 split 将适用于我的示例,但并非总是让我的示例为 100K。
  • 如果您尝试在 Windows 上执行此操作并且不想使用 Cygwin,此项目提供所有需要的实用程序作为本机 win32 二进制文件 - unxutils.sourceforge.net
  • 我会使用tail -n +L file_name &gt; bottom_file,其中只需L=K+1,无需先运行wc
  • 我宁愿使用sed -n '1,1000p' test.log &gt; top_test.log ; sed '1,1000d' test.log &gt; bottom_test.log。 IHMO,这更直接,不需要计算总行数。此外,如果在每个命令的执行之间添加行,它仍然有效。
  • 对于某些文件,这个答案会留下一行,但 Hashbrown 建议的编辑解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多