如何在bash中对具有不同字段位置的值进行排序

时间:2014-06-25 23:14:18

标签: bash

我发现看着我的日志;对git的提交可能有或没有名称和姓氏;这意味着如果我使用-k排序,字段的位置可能不正确。

例如,如果我得到一个提交到各种存储库的文件,我的标准格式是

commit - name - surname - date - repo name

我用sort -k 4对它们进行排序,所以我按日期排序(这就是我需要的)/

问题是,有时提交者名称被通用名称替换(不确定原因,我不管理存储库);所以最终跳过一个字段,日期现在是第3个位置,而不是第4个位置。

这导致大多数提交正确排序,但是那些日期位于第3个位置的提交最终位于底部,所以我没有按时间顺序排序。

由于我无法控制回购投掷给我的东西,有没有办法告诉排序,按日期排序,而不指定哪一个是具有日期的字段? 或者我应该使用与排序不同的东西吗?

1 个答案:

答案 0 :(得分:0)

你能不能只检查线路上的字段数量?即从最后一个元素而不是从第一个元素开始计算?

虽然sort可能没有足够的功能来从行尾指定密钥,因此您可能不得不求助于一个小的awk脚本,以根据每个中的记录数找到正确的排序键。线。

像;

# Reorder fields to be date - reponame - commit - name - surname(optional)
awk '{
    if (NF==4) print $3, $4, $1, $2; 
    else print $4, $5, $1, $2, $3;
}' file.log | sort -k1