Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 根据最后一个字符串排序行并删除除一行以外的所有行?_Bash_Sorting_Awk_Sed - Fatal编程技术网

Bash 根据最后一个字符串排序行并删除除一行以外的所有行?

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

在搜索问题的解决方案时,我发现以下线程:

我使用了一些使用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
所以我只需要保留一行,其中包含最后一个字符串,在本例中,它们用下划线分隔。我感谢你的帮助

$ 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