gpt4 book ai didi

linux - 从 CSV 文件中提取具有唯一值的前 3 行

转载 作者:太空宇宙 更新时间:2023-11-04 04:04:18 27 4
gpt4 key购买 nike

我有一个很大的 CSV 文件,我想按第 2 列和第 3 列对其进行排序,并仅采用第 2 列中具有唯一值的前 3 行。所以我搜索类似的内容:

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

知道如何在命令行上执行此操作而不需要自己编写程序吗?

最佳答案

虽然很难看,但我认为这会起作用。

假设:

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

代码:

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 和 3 进行排序后,我们将使用行号作为索引从 $FILE 中提取所需的行。
  2. sort:按字段 2 和 3 对输出进行数字排序。
  3. awk:删除字段 3,仅保留行号和字段 2。
  4. uniq: 仅打印唯一的行,忽略行号。
  5. head: 仅打印前 3 行。
  6. while: 读取 3 个行号,忽略每行的其余部分。打印原始文件中的该行。

关于linux - 从 CSV 文件中提取具有唯一值的前 3 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21882221/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com