簡體   English   中英

linux 使用 sort 命令按列表的最后部分排序

[英]linux sorting of lists by their last parts by using sort command

如何使用sort或任何相關命令對如下列表進行排序?

12.ale.panal.sel.blr.teta.hf.ew.rr.lwq.ors.2018
34.ev.we.ars.lmn.2017
5.lam.bere.meto.belagn.hede.we.e.2020
54.arad.met.kal.sil.tek.br.yz.2005

我想按照年份的最后一個單詞對它們進行排序? 注意基本上類似於 sort -t。 -k-1 雖然 -1 是不允許的。 任何命令只是為了解決最后一部分?

在每個類似中具有不同數量的字段會使它變得更加復雜。

此解決方案使用GNU datamash反轉每行的字段,以便可以按第一列排序,然后將其返回到原始順序:

$ datamash --no-strict -t. reverse < input.txt | sort -t. -k1,1n | datamash --no-strict -t. reverse
54.arad.met.kal.sil.tek.br.yz.2005
34.ev.we.ars.lmn.2017
12.ale.panal.sel.blr.teta.hf.ew.rr.lwq.ors.2018
5.lam.bere.meto.belagn.hede.we.e.2020

或者使用awk的類似方法將最后一列復制到新的第一列sort ,然后cut以刪除第一列:

awk -F. '{ printf "%s\t%s\n", $NF, $0 }' input.txt | sort -k1,1n | cut -f2-
$ sed -E 's,([0-9]*$),#\1,' data |  sort -t# -n -k 2,2 | sed 's,#,,'
54.arad.met.kal.sil.tek.br.yz.2005
34.ev.we.ars.lmn.2017
12.ale.panal.sel.blr.teta.hf.ew.rr.lwq.ors.2018
5.lam.bere.meto.belagn.hede.we.e.2020

解釋:

  1. 在排序鍵字段前面放置一個人工分隔符,例如#。
  2. 使用以此分隔符開頭的鍵進行排序。
  3. 刪除分隔符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM