簡體   English   中英

在外殼中使用特定分隔符前的最后一個單詞對文本進行排序

[英]Sort text in shell using last word before specific delimiter

如何在外殼中按一定定界符之前的最后一個字母作為關鍵字按字母順序對文本文件進行排序?

例如以下文件:

Manfred1 Mustermann1 (Berlin)
Manfred Siegfried Müller (Aachen)
Gerd A. Meier (Stuttgart)

在這種情況下,定界符將為“(”,我想使用列表中人員的姓氏進行排序。姓氏前的單詞數是變化的。

給定一行文本,我知道如何提取密鑰:

s="Manfred1 Mustermann1 (Berlin)"
w=${s%% (*}
l=${w##* }
echo $l

這將顯示“ Mustermann1”,但是我沒有得到任何進一步的信息。

編輯使用l0b0的答案,這是完成此操作的完整代碼:

while read s; do
w=${s%% (*}
l=${w##* }
printf "%s\t%s\n" "$l" "$s"
done <names.txt | sort -k 1 | cut  -f 2 > names_sorted.txt

其中names.txt包含文本,並且已排序的列表將被打印到names_sorted.txt

獲得排序鍵( $l )后,您可以像這樣繼續:

  1. 如在printf %s\\t%s\\n一樣,打印排序鍵,然后是制表符,然后是原始行。
  2. 使用sort--key選項按第一列進行排序(選項卡應為默認的鍵分隔符)。
  3. 使用awkgrep刪除排序鍵和制表符。

暫無
暫無

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

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