Bash 根据最后一个字符串排序行并删除除一行以外的所有行?
在搜索问题的解决方案时,我发现以下线程: 我使用了一些使用sed和awk进行排序的解决方案,它们很有效,我还需要根据行中最后一个字符串删除除一行之外的所有行 例如,我有:Bash 根据最后一个字符串排序行并删除除一行以外的所有行?,bash,sorting,awk,sed,Bash,Sorting,Awk,Sed,在搜索问题的解决方案时,我发现以下线程: 我使用了一些使用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/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
所以我只需要保留一行,其中包含最后一个字符串,在本例中,它们用下划线分隔。我感谢你的帮助
$ 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指的是最后一个字段,[$NF]++统计从零开始的每个值的出现次数![$NF]++对值求反,因此只有当计数为零时才为真,这是键值的第一个实例。这个网站有很多awk习惯用法的例子
假设前面没有下划线
awk解决方案可以是
$ awk -F_ '!a[$NF]++' file
www.site.com/324242_1234
www.site.com/6545_2345
www.site.com/87745_456
解释设置字段分隔符后,$NF指的是最后一个字段,[$NF]++统计从零开始的每个值的出现次数![$NF]++对值求反,因此只有当计数为零时才为真,这是键值的第一个实例。这个网站有很多awk习语的例子。这个怎么样
cat file | sed -e 's/_/\t/gi' | sort -uk 2,2 | sed -e 's/\t/_/gi'
文件中有字符串的地方这个怎么样
cat file | sed -e 's/_/\t/gi' | sort -uk 2,2 | sed -e 's/\t/_/gi'
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
文件中有字符串的地方如果您展示到目前为止您尝试过的代码,并描述您在使用它时遇到的问题,您将得到更友好的接待和更好的帮助。如果没有代码,您的问题看起来像是免费咨询的请求,在StackOverflow上,许多人不喜欢这样。如果您展示您迄今为止尝试过的代码,并描述您在使用它时遇到的问题,您将得到更友好的接待和更好的帮助。如果没有代码,您的问题看起来像是免费咨询的请求,在StackOverflow上,许多人不喜欢这样。请解释神秘的awk脚本请解释神秘的awk脚本
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