首页 > 解决方案 > bash 按最后一次出现的键排序

问题描述

我想用@加一个数字对每行末尾标记的一些文件进行排序。问题是你可以在每行不止一次找到@。该文件可能类似于:

'Hello from line 2' @2
'Hello from line 3' @3
'Hi' @5 'Hello from line 1' @1

我希望我的输出是这样排序的:

'Hi' @5 'Hello from line 1' @1
'Hello from line 2' @2
'Hello from line 3' @3

但是@5 阻碍了它。我已经测试过:

cat myFile.txt | sort -t@ -k2

但是@不在特定的列中,在最后。我在这个网站上看到了一些使用 awk 的解决方案,但在我的情况下似乎失败了。

欢迎任何帮助。

标签: linuxbashsorting

解决方案


带有 awk 和 cut 的Schwartzian 变换:

awk -F '@' '{print $NF,$0}' file | sort -n | cut -d " " -f 2-

$NF 包含最后一列。

输出:

'嗨' @5 '来自第 1 行的你好' @1
'来自第 2 行的你好' @2
'来自第 3 行的你好' @3

推荐阅读