在寻找解决问题的方法时,我发现了以下线程:Sorting on the last field of a line
我使用了一些使用sed
和awk
进行排序的解决方案,它们起作用了,我需要做的另一件事是根据一行中的最后一个字符串删除除一行之外的所有行。
例如,我有:
www.site.com/324242_1234
www.site.com/233_1234
www.site.com/45357_1234
www.site.com/6545_2345
www.site.com/5433_2345
www.site.com/87745_456
www.site.com/453209_456
www.site.com/1345_456
需要此结果:
www.site.com/324242_1234
www.site.com/6545_2345
www.site.com/87745_456
因此,我只需要保留包含最后一个字符串的一行,在此示例中,它们由下划线分隔。感谢您的帮助。
答案 0 :(得分:2)
$ sort -t_ -u -k2 file
www.site.com/324242_1234
www.site.com/6545_2345
www.site.com/87745_456
假定前面没有下划线。
awk
解决方案可以
$ awk -F_ '!a[$NF]++' file
www.site.com/324242_1234
www.site.com/6545_2345
www.site.com/87745_456
说明:设置了字段定界符后,$NF
指向最后一个字段,a[$NF]++
对从零开始的每个值的出现进行计数。 !a[$NF]++
取反该值,因此仅当计数为零(这是键值的第一个实例)为零时才为真。这个站点有许多这个awk
习惯用法的例子。
答案 1 :(得分:1)
怎么样?
SELECT USERNAME
FROM DBA_USERS
WHERE (LAST_LOGIN IS NULL)
AND USERNAME NOT LIKE 'SYS%'
ORDER BY LAST_LOGIN ASC;
文件中包含字符串的位置
答案 2 :(得分:1)
awk -F[_/] '{print $NF,$(NF-1),$0}' input_file |sort -r -nk2,1 |awk '!a[$1]++{gsub($1FS$2,"");gsub(/^ /,"");print}'
www.site.com/87745_456
www.site.com/6545_2345
www.site.com/45357_1234