所以我现在四处看了几个小时,但没有发现任何有用的东西。
我想对具有大量行格式的文件进行排序,如
Values1, values2, values3, values4, values5, values6,
但我想只返回与
唯一相关的行Values1, values2, values3, values6
因为我有多个实例Values1,values2,values3,values6,其唯一的区别是values4,values5和我不想返回那些,而只是一行的一个实例(最好是与值4的最大值,值5,但这没什么大不了的)
我尝试过使用过 uniq -s ## 但这不起作用,因为我的值长度是可变的。
我也试过了 sort -u -k 1,3 但这似乎也无济于事。
主要是我的问题是我的值长度可变,我不关心按值排序6但是它会很好。
任何帮助将不胜感激
答案 0 :(得分:1)
使用awk,您可以第一次打印"键"看到了:
awk '
{ key = $1 OFS $2 OFS $3 OFS $6 }
!seen[key]++
' file
魔法!seen[key]++
是一个awk成语。它仅在第一次遇到该键时返回true。然后它会增加值,以便在任何后续遭遇中都不会成立。
答案 1 :(得分:0)
替代awk
cut -d" " -f1-3,6 filename | sort -u
仅提取必填字段,排序唯一
答案 2 :(得分:0)
如果您绝对不能使用@karafka建议的非常干净的cut
方法,那么在输入csv文件的情况下,可以使用uniq -f <num>
跳过第一个<num>
唯一性比较的列。
由于uniq期望将空白作为分隔符,因此我们需要更改此值并重新排列列以满足您的要求。
sed 's/,/\t/g' textfile.csv | awk '{ print $4,$5,$1,$2,$3,$6}' | \
sort -k3,4,5,6 | uniq -f 2 | \
awk 'BEGIN{OFS=",";} { print $3,$4,$5,$1,$2,$6}'
这样,仅打印第一行值(排序后)$ 4和$ 5。