繁体   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