对具有特定列的文件进行排序和唯一化,并仅保留给定文件中的第一个值
sort and uniq a file with a specific column and only keep 1st value from given file
我有示例文件
$ cat a.csv
a,1,c
b,1,d
d,3,a
s,2,c
a,3,s
必填
a,1,c
s,2,c
a,3,s
它必须删除 uniq 之后的所有其他值,但只保留第一个值
排序和 uniq
a,1,c
s,2,c
a,3,s
我尝试 sort -k2 -n a.csv
但给了我这个结果
a,1,c
a,3,s
b,1,d
d,3,a
s,2,c
当我尝试 sort -k2 -n a.csv | uniq -d
我得到的结果是空白
$ sort -t, -u -k2,2 a.csv
a,1,c
s,2,c
d,3,a
-t,
指定 ,
作为分隔符
-u
仅获取唯一条目
-k2,2
使用第二列作为排序标准
awk 中的另一个:
$ awk -F, '{if(!( in a)||[=10=]<a[])a[]=[=10=]}END{for(i in a)print a[i]}' file
输出(以 awk 默认顺序):
a,1,c
s,2,c
a,3,s
解释:
$ awk -F, ' # fields comma-separated
{
if(!( in a) || [=12=]<a[]) # if unseen or record < stored record
a[]=[=12=] # store it to a hash
}
END { # after processing the file
# PROCINFO["sorted_in"]="@ind_num_desc" # sort output on if using GNU awk
for(i in a) # iterate all stored instances in a
print a[i] # and output
}' file
输出顺序将是 awk 默认的,即。可能会随机出现。如果要对输出进行排序,则需要使用 sort
或者如果您使用的是 GNU awk,请取消注释解释版本中的 PROCINFO["sorted_in"]="@ind_num_desc"
(或将行添加到单行)。
我有示例文件
$ cat a.csv
a,1,c
b,1,d
d,3,a
s,2,c
a,3,s
必填
a,1,c
s,2,c
a,3,s
它必须删除 uniq 之后的所有其他值,但只保留第一个值
排序和 uniq
a,1,c
s,2,c
a,3,s
我尝试 sort -k2 -n a.csv
但给了我这个结果
a,1,c
a,3,s
b,1,d
d,3,a
s,2,c
当我尝试 sort -k2 -n a.csv | uniq -d
我得到的结果是空白
$ sort -t, -u -k2,2 a.csv
a,1,c
s,2,c
d,3,a
-t,
指定,
作为分隔符-u
仅获取唯一条目-k2,2
使用第二列作为排序标准
awk 中的另一个:
$ awk -F, '{if(!( in a)||[=10=]<a[])a[]=[=10=]}END{for(i in a)print a[i]}' file
输出(以 awk 默认顺序):
a,1,c
s,2,c
a,3,s
解释:
$ awk -F, ' # fields comma-separated
{
if(!( in a) || [=12=]<a[]) # if unseen or record < stored record
a[]=[=12=] # store it to a hash
}
END { # after processing the file
# PROCINFO["sorted_in"]="@ind_num_desc" # sort output on if using GNU awk
for(i in a) # iterate all stored instances in a
print a[i] # and output
}' file
输出顺序将是 awk 默认的,即。可能会随机出现。如果要对输出进行排序,则需要使用 sort
或者如果您使用的是 GNU awk,请取消注释解释版本中的 PROCINFO["sorted_in"]="@ind_num_desc"
(或将行添加到单行)。