【问题标题】:sed single line address seems to go through the whole filesed 单行地址似乎贯穿整个文件
【发布时间】:2013-11-28 20:27:33
【问题描述】:

我有一个大数据文件。每行是一条记录。听起来像是 sed 的工作。

我想检查几行数据,一次一个,但它们是带有 base64 编码值的 json。要检查第 2 行,我运行:

sed -n 2p hugeFile | json 'key' | base64 --decode

这很好用,除了 sed 似乎继续遍历文件。

我是不是在这里错误地使用了 sed,还是它真的遍历了每个文件,检查每一行以查看它是否是第 2 行?

【问题讨论】:

    标签: sed


    【解决方案1】:

    可以用花括号组合多个命令,执行q命令立即退出。

    sed -n '2{p;q;}' hugeFile
    

    它的工作原理是这样的,因为您可能有多个命令,或者一个地址不只是一个行号。 sed 不会优化只有一个命令并且是行号范围的特殊情况。

    【讨论】:

    • 在这种情况下很有帮助。但是假设他想在一个大文件的中间打印一行,怎么能阻止sed逐行处理呢?我认为这是不可能的。可以通过awk 解决这个问题吗?
    • 如何在不逐行处理的情况下到达文件中间的那一行?文本文件没有可让您直接转到特定行号的索引,您必须按顺序阅读并计算换行符。
    • 我突然意识到我对 sed 知之甚少——我假设 np 会告诉我第 n 行的内容,而不是 n 是地址,而 p 是打印命令。然后我假设2{p;q;} 说“在第 2 行,打印该行,然后退出”。
    • 您也可以使用 -u 传入流版本(如果在您的 sed 版本中可用)。在大文件上,它通过不缓冲文件来帮助。在巨大的文件上,我经常用 sed 标头/尾标文本部分,这样会更快
    猜你喜欢
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 2012-09-27
    相关资源
    最近更新 更多