首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从CSV文件中提取具有Uniq值的前3行

从CSV文件中提取具有Uniq值的前3行
EN

Stack Overflow用户
提问于 2014-02-19 21:40:12
回答 1查看 190关注 0票数 0

我有一个很大的CSV文件,我想按column2和column3对它进行排序,只取column2中具有唯一值的前3行。所以我会搜索类似这样的东西:

sort -k2,2 -k3,3 -u2,2-3 (实际中不存在-u2,2-3部分)。

你知道如何在命令行上做到这一点而不是自己写程序吗?

EN

回答 1

Stack Overflow用户

发布于 2014-02-19 22:48:11

它很难看,但我认为这会起作用的。

假设:

  1. 您的文件名为$FILE
  2. 文件只包含用逗号分隔的数字。

代码:

代码语言:javascript
复制
awk 'BEGIN { FS="," } !/^$/ { print NR,$2,$3 }' < $FILE |
    sort -nk 2,3 |
    awk '{ print $1,$2 }'
    uniq -uf 1 |
    head -n 3 |
    while read num ignore; do sed -n "${num}p" < $FILE; done

逐行解释:

  1. awk:打印文件中所有非空行的行号和字段2和3。稍后,我们将使用行号作为索引来从字段2中提取所需的行,在我们对字段2和3.
  2. sort:进行排序之后,按字段2和3.
  3. awk:删除字段3对输出进行数字排序,只留下行号和字段2.
  4. uniq:只打印唯一的行,忽略行number.
  5. head:只打印前3行lines.
  6. while:读取前3行编号,忽略每行的其余部分。打印原始文件中的该行。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21882221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档