0
我有一个很大的CSV文件,我想按column2和column3对它进行排序,并且只取第2行中具有唯一值的前3行。所以我寻找类似的东西:从CSV文件中提取前3行,包含uniq值
sort -k2,2 -k3,3 -u2,2-3(-u2,2-3部分实际上不存在)。
任何想法如何在命令行上做到这一点,而无需自己编写程序?
我有一个很大的CSV文件,我想按column2和column3对它进行排序,并且只取第2行中具有唯一值的前3行。所以我寻找类似的东西:从CSV文件中提取前3行,包含uniq值
sort -k2,2 -k3,3 -u2,2-3(-u2,2-3部分实际上不存在)。
任何想法如何在命令行上做到这一点,而无需自己编写程序?
这很丑,但我认为这会奏效。
假设:
$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文件。稍后,我们将使用行号作为索引所需的线从$FILE
提取,我们的字段2和3sort:
排序数值由字段2和3awk:
删除排序后输出字段3,只留下行号和字段2.uniq:
仅打印唯一的行,忽略行号。head:
只打印前3行。while:
阅读3行数字,忽略每行的其余部分。从原始文件中打印该行。
_“没有自己编写程序吗?”_你将以编写CLI程序结束(它将由bash执行) –