我偶然发现了这个问题,我不择手段地解决了这个问题。但我需要你的帮助才能找到一个精确的解决方案。作为初学者awk/sed
,我无法用一个衬里(我确信有)或awk
脚本来解决它,尽管我可以使用很多管道。
这是问题:
我有一个大的 .csv 文件,其中的条目类似于:
文件(空格分隔)
$ cat file
a d e r None
c f g r a
c f g r None
d a d e c
d a d e None
g f r t None
g f t r None
k f r e d
r e t y None
s c d er d
g f r t 4
没有重复项。但是如果你仔细看,第 1、2、3、4 列中的条目是重复的,唯一的变化是第 5 列,带有'None'
. 因此,我需要删除在 1、2、3、4 字段中重复且None
在第 5 列中的行(记录)。
这是我编写的代码,它有效,但没有人会推荐:
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
替换为的目的None
是zzz
在排序后,行将出现在最后,并将awk
从剩余列中删除第二次出现的重复项。反转列序列并将其重新反转回来的原因也是如此。种类。
如果你能帮忙,请。谢谢!