使用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
有什么建议吗?
答案 0 :(得分:4)
在上一个命令中尝试awk -F,
。所以:
cat p1.csv | sort -t "," -k2 | awk -F, '!x[$2]++'
由于您的字段以逗号分隔,因此您需要告诉awk字段分隔符不再是空格,而是逗号。 awk的-F
选项可以做到这一点。
答案 1 :(得分:4)
嗯,你不需要所有这些东西,sort
和uniq
足以做这些事情
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]++'