我有一个很大的CSV文件,我想按column2和column3对它进行排序,只取column2中具有唯一值的前3行。所以我会搜索类似这样的东西:
sort -k2,2 -k3,3 -u2,2-3 (实际中不存在-u2,2-3部分)。
你知道如何在命令行上做到这一点而不是自己写程序吗?
发布于 2014-02-19 22:48:11
它很难看,但我认为这会起作用的。
假设:
$FILE。代码:
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逐行解释:
awk:打印文件中所有非空行的行号和字段2和3。稍后,我们将使用行号作为索引来从字段2中提取所需的行,在我们对字段2和3.sort:进行排序之后,按字段2和3.awk:删除字段3对输出进行数字排序,只留下行号和字段2.uniq:只打印唯一的行,忽略行number.head:只打印前3行lines.while:读取前3行编号,忽略每行的其余部分。打印原始文件中的该行。https://stackoverflow.com/questions/21882221
复制相似问题