【问题标题】:TR + SED in one time on large fileTR + SED 一次处理大文件
【发布时间】:2014-08-23 00:11:19
【问题描述】:

我需要对大文件执行 2 个 unix 命令(.csv 以 \0001 分隔,几百万行,超过 15gb,在具有 24 核 512gb 内存的服务器上)。

我需要tr(将\0001替换为/t)然后sed在每行的末尾添加一个小字符串。

问题是我第一次运行 TR 然后,在将文件的所有行解析为新文件后,我执行 sed 命令添加到每一行。这需要很多时间!

有没有办法我可以只为 exec trsed 解析文件的每一行?

【问题讨论】:

  • 只是出于兴趣:“走”是什么样的测量?
  • 嗨 :) 好的,我是法国人,Giga Octets = Giga Bytes = 8 * Giga Bits

标签: linux unix sed tr


【解决方案1】:

您只能使用sed 并在每行应用两个操作:

sed 's/\\0001/\t/g;s/$/TEXT_TO_APPEND/' input.file

第一个s/ 命令将\0001 替换为\t,第二个命令允许您附加一些文本。

【讨论】:

  • 也许sed 's/$/TEXT_TO_APPEND/' file 可能比使用反向引用更快。顺便说一句,&\0 的同义词。
  • @potong 好点!至少它看起来更干净。补充说。谢谢!
【解决方案2】:

您可以使用unix管道将trSTOUT连接到sedSTDIN

cat input.file | tr -opt -ions | sed 's/../../g' > output.file

【讨论】:

  • 我很喜欢,但我不能投票,因为我在 15 岁以下的名声,sry :/
  • 它不尊重避免启动2应用程序的请求。 (但作为信息欢迎发表评论)
  • @NeronLeVelu 如果您仔细阅读该问题,您会发现它不是关于“避免执行两个二进制文件”。但是,我支持您的论点,因为使用单个 sed 命令执行得更好。尽管如此,对 unix 管道的引用将有助于初学者更好地理解这些要求。
猜你喜欢
  • 1970-01-01
  • 2010-11-13
  • 2014-05-11
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
  • 2016-10-14
相关资源
最近更新 更多