linux - 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 的解决方案,但在我的情况下似乎失败了。
欢迎任何帮助。
解决方案
带有 awk 和 cut 的Schwartzian 变换:
awk -F '@' '{print $NF,$0}' file | sort -n | cut -d " " -f 2-
$NF 包含最后一列。
输出:
'嗨' @5 '来自第 1 行的你好' @1 '来自第 2 行的你好' @2 '来自第 3 行的你好' @3
推荐阅读
- bash - 用空格替换文本 OSX Sed
- excel - 运行时错误“1004”应用程序定义或对象定义错误
- reactjs - 谁能解释这种在javascript中一次包含两个类的方式
- mysql - 如何在 SQL 中链接来自多个表的记录?
- javascript - JQuery 在评论中点击更改文本
- c# - 在c#中从查找服务当前年份和上一年获取并绑定
- matlab - 通过调用 Matlab 在 Fortran 循环中创建实时绘图
- python - 从开始和结束坐标识别不同的多边形
- proxy - 错误:连接到 localhost 时,Econnrefured
- fwrite - 重写文件读取的最后一部分