在特定分隔符

时间:2017-07-27 08:52:17

标签: shell sorting text formatting

如何在某个分隔符作为键之前使用最后一个单词在shell中按字母顺序对文本文件进行排序?

E.g。以下文件:

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

1 个答案:

答案 0 :(得分:0)

获得排序键($l)后,您可以这样继续:

  1. 打印排序键后跟一个制表符,后跟原始行,如printf %s\t%s\n中所示。
  2. 使用sort的{​​{1}}选项按第一列排序(标签应为默认密钥分隔符)。
  3. 使用--keyawk
  4. 删除排序键和制表符