Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting linux-awk或sed或sort-filter文本文件根据规则消除某些重复行_Sorting_Awk_Sed - Fatal编程技术网

Sorting linux-awk或sed或sort-filter文本文件根据规则消除某些重复行

Sorting linux-awk或sed或sort-filter文本文件根据规则消除某些重复行,sorting,awk,sed,Sorting,Awk,Sed,我有一个包含可变行数的文件,如: 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

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

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.00 99.00 cn015 00:00:02 1 0.00 99.00 cn015 01:00:01 0.00 99.00 cn015 01:00:01 1 0.00 99.00 cn015 01:00:02 0.00 99.00 cn015 01:00:02 1 0.00 99.00 cn015 02:00:01 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.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 cn015 00:00:02 0.00 99.00 cn015 00:00:02 1 0.00 99.00 cn015 01:00:01 0.00 99.00 cn015 01:00:01 1 0.00 99.00 cn015 02:00:01 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:02 0.00 99.00 cn015 00:00:02 1 0.00 99.00 对于cn015(00:00时)


我更喜欢使用
awk
来回答问题,但是
sed
sort
是可以接受的。

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

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

A.鉴于您的样本要求输出低于该值,我不清楚您所说的“每小时仅第一行”是什么意思。B.使用突出显示文本编辑框左上角的
{}
工具,使代码/数据/错误信息保持正确格式。你忘了发代码了。StackOverflow是关于帮助人们修复代码的。这不是免费的编码服务。有代码总比没有代码好。祝你好运。输入行有排序吗?第一场?按第一和第二字段?按前三个字段?所有行都按第一、第二和第三列排序,如示例。shellter:我没有代码可共享,因为没有。我想使用一个简单的脚本来过滤输出。我可以使用一些循环来消除这些行,但是速度很慢而且没有优化,因为文本文件包含200.000行。