使用sort |从csv的一列上awk?

时间:2013-05-23 17:59:11

标签: sorting awk cat

使用p.txt:

$cat p.txt
R 3
R 4
S 1
S 2
R 1
T 1
R 3

以下命令根据第二列排序:

$cat p.txt | sort -k2
R 1
S 1
T 1
S 2
R 3
R 3
R 4

以下命令删除第二列中的重复值:

$cat p.txt | sort -k2 | awk '!x[$2]++'
R 1
S 2
R 3
R 4

现在为sapce插入一个逗号,我们有以下文件:

$cat p1.csv
R,3
R,4
S,1
S,2
R,1
T,1
R,3

以下命令仍会根据第二列进行排序:

$cat p1.csv | sort -t "," -k2
R,1
S,1
T,1
S,2
R,3
R,3
R,4

以下不是正确的输出:

$cat p1.csv | sort -t "," -k2 | awk '!x[$2]++'
R,1

正确输出:

R,1
S,2
R,3
R,4

有什么建议吗?

4 个答案:

答案 0 :(得分:4)

在上一个命令中尝试awk -F,。所以:

cat p1.csv | sort -t "," -k2 | awk -F, '!x[$2]++'

由于您的字段以逗号分隔,因此您需要告诉awk字段分隔符不再是空格,而是逗号。 awk的-F选项可以做到这一点。

答案 1 :(得分:4)

嗯,你不需要所有这些东西,sortuniq足以做这些事情

sort -t "," -k2 p1.csv | uniq -s 2

uniq -s 2告诉uniq跳过前2个字符(即直到,

答案 2 :(得分:4)

你已经使用了排序,那么你根本不需要awk。排序有-u

也不需要cat

sort -t, -k2 -u p1.csv 

应该给你预期的输出。

答案 3 :(得分:1)

您需要为awk

提供字段分隔符
 cat p1.csv | sort -t "," -k2 | awk -F, '!x[$2]++'