Unix 删除csv中的行,该csv在一列中有特定条目,而在其他列中的条目重复

Unix 删除csv中的行,该csv在一列中有特定条目,而在其他列中的条目重复,unix,sed,awk,Unix,Sed,Awk,我偶然发现这个问题,不择手段地解决了。但我需要你帮我找到一个精确的解决方案。作为awk/sed的初学者,我不能用一行程序(我确信有)或awk脚本来解决它,尽管我可以用很多管道 问题是: 我有一个大的.csv文件,其条目如下: 文件(以空格分隔) 没有重复的。但是如果您仔细看,第1、2、3、4列中有重复的条目,唯一的变化是第5列,带有“None”。因此,我需要删除在1,2,3,4字段中重复的行(记录),并且在第5列中有None 以下是我编写的代码,虽然有效,但没有人会推荐: awk '{print

我偶然发现这个问题,不择手段地解决了。但我需要你帮我找到一个精确的解决方案。作为
awk/sed
的初学者,我不能用一行程序(我确信有)或
awk
脚本来解决它,尽管我可以用很多管道

问题是:

我有一个大的.csv文件,其条目如下:

文件(以空格分隔)

没有重复的。但是如果您仔细看,第1、2、3、4列中有重复的条目,唯一的变化是第5列,带有
“None”
。因此,我需要删除在1,2,3,4字段中重复的行(记录),并且在第5列中有
None

以下是我编写的代码,虽然有效,但没有人会推荐:

awk '{print $5,$4,$3,$2,$1}' file | sed 's/None/zzz/g' | sort | awk '!array[$2,$3,$4,$5]++' | sed 's/zzz/None/g'
这是我得到的,我期待的结果

4 t r f g
a r g f c
c e d a d
d e r f k
d er d c s
None r e d a
None r t f g
None y t e r
zzz
替换
None
的目的在排序后,行将显示在最后,
awk
将从其余列中删除第二次出现的重复项。 这也是反转列序列并将其重新反转回来的原因。排序

请帮忙。谢谢

我得到了这个解决方案:

awk '{s=$4" "$3" "$2" "$1; if($5=="None"&& s in a)next;else a[s]=$5" "s}END{for(i in a)print a[i]}' file|sort
它输出:

kent$  awk '{s=$4" "$3" "$2" "$1; if($5=="None"&& s in a)next;else a[s]=$5" "s}END{for(i in a)print a[i]}' file|sort
4 t r f g
a r g f c
c e d a d
d er d c s
d e r f k
None r e d a
None r t f g
None y t e r

看来这和你的期望是一样的

谢谢你,肯特。这很有效。但是花了一些时间去理解!
kent$  awk '{s=$4" "$3" "$2" "$1; if($5=="None"&& s in a)next;else a[s]=$5" "s}END{for(i in a)print a[i]}' file|sort
4 t r f g
a r g f c
c e d a d
d er d c s
d e r f k
None r e d a
None r t f g
None y t e r