1

使用 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

4 回答 4

4

好吧,您不需要所有这些东西,sort并且uniq足以做这些事情

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

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

于 2013-05-23T18:15:50.583 回答
4

试试awk -F,你的最后一个命令。所以:

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

由于您的字段由逗号分隔,您需要告诉 awk 字段分隔符不再是空格,而是逗号。-Fawk的选项就是这样做的。

于 2013-05-23T18:02:32.677 回答
4

好吧,您已经使用过排序,那么您根本不需要 awk。排序有-u

cat也不需要:

sort -t, -k2 -u p1.csv 

应该给你预期的输出。

于 2013-05-24T00:23:28.793 回答
1

您需要为awk

 cat p1.csv | sort -t "," -k2 | awk -F, '!x[$2]++'
于 2013-05-23T18:03:20.617 回答