【问题标题】:linux - awk or sed or sort -filter text file eliminating some duplicates row based on ruleslinux - awk 或 sed 或 sort -filter 文本文件根据规则消除一些重复行
【发布时间】:2016-06-25 17:40:15
【问题描述】:

我有一个包含可变行数的文件,例如:

cn015 00:00:02 0 0.00 99.00 cn015 00:00:02 1 0.00 99.00 cn015 01:00:01 0 0.00 99.00 cn015 01:00:01 1 0.00 99.00 cn015 01:00:02 0 0.00 99.00 cn015 01:00:02 1 0.00 99.00 cn015 02:00:01 0 0.00 99.00 cn015 02:00:01 1 0.00 99.00 cn017 11:00:01 0 24.41 74.59 cn017 11:00:01 1 24.90 74.10 cn017 11:00:02 0 95.96 3.04 cn017 11:00:02 1 96.04 2.96 cn017 12:00:01 0 30.34 68.66 cn017 12:00:01 1 31.24 67.76 cn017 12:00:02 0 0.00 99.00 cn017 12:00:02 1 0.00 99.00
  • 第一列是文本
  • 第二列是时间字段
  • 第三个是数字

我想获取这样的文件:

cn015 00:00:02 0 0.00 99.00 cn015 00:00:02 1 0.00 99.00 cn015 01:00:01 0 0.00 99.00 cn015 01:00:01 1 0.00 99.00 cn015 02:00:01 0 0.00 99.00 cn015 02:00:01 1 0.00 99.00 cn017 11:00:01 0 24.41 74.59 cn017 11:00:01 1 24.90 74.10 cn017 12:00:01 0 30.34 68.66 cn017 12:00:01 1 31.24 67.76

我希望每个 cn 的每个小时只有第一行(在这个例子中,只有

cn015 00:00:02 0 0.00 99.00 cn015 00:00:02 1 0.00 99.00

cn015 00:00)

我更喜欢使用awk 的答案,但sedsort 也可以接受。

【问题讨论】:

  • A.鉴于您的示例所需的输出低于此,不清楚您所说的“仅每小时的第一行”是什么意思。 B. 在突出显示的文本上使用编辑框左上角的{} 工具来保持代码/数据/errMsgs 的格式正确。 C. 您忘记发布您的代码。 StackOverflow 旨在帮助人们修复他们的代码。这不是免费的编码服务。任何代码都比没有代码好。祝你好运。
  • 输入行是否已排序?按第一个字段?按第一个和第二个字段?按前三个字段?
  • 所有行都像样例一样按第一、二、三列排序。
  • shellter:我没有要分享的代码,因为没有 .我想使用一个简单的脚本来过滤输出。我可以使用一些循环来消除这些行,但它很慢并且没有优化,因为文本文件包含 200.000 行。

标签: sorting awk sed


【解决方案1】:

awk 来救援!

  $ awk '{split($2,t,":")} !a[$1,t[1],$3]++' file

  cn015 00:00:02  0   0.00  99.00
  cn015 00:00:02  1   0.00  99.00
  cn015 01:00:01  0   0.00  99.00
  cn015 01:00:01  1   0.00  99.00
  cn015 02:00:01  0   0.00  99.00
  cn015 02:00:01  1   0.00  99.00
  cn017 11:00:01  0  24.41  74.59
  cn017 11:00:01  1  24.90  74.10
  cn017 12:00:01  0  30.34  68.66
  cn017 12:00:01  1  31.24  67.76

为每个给定小时打印唯一的第一个和第三个字段的行。这是我对问题的理解。

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 2023-03-05
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多