Linux 按字母顺序排序单词并为每个字母创建一个文件

问题描述

我想编写一个 shell 脚本,它会自动创建 26 个字典文件,其中第一个文件应包含所有以 a 或 A 开头的单词,第二个文件应包含所有以 b 或 B 开头的单词,等等。其中每个字典文件已排序。例如,如果我有一个包含 Lime、Apple、Orange、Avacado、Apricot、Lemon 字样的文件。然后我想要一个按顺序包含 Apple、Apricot、Avacado 的新文件一个只包含 Orange 的文件,以及一个包含 Lemon、Lime 的文件

我想过使用排序来做这件事,所以可能是:

sort sample.txt

但这不会将单词的每个部分都放入一个文件中。所以我想这样做:

sort sample.txt > [a-z].txt

但这只会生成一个名为 [a-z].txt 的新文件

如何根据文件中的单词列表制作不同的按字母顺序排序的文件?我希望它像 a.txt、b.txt 等,每个都包含以该字母开头的所有单词。

解决方法

你可以用 awk 做到这一点:

awk '{ print $0 >> toupper(substr($0,1,1))"_wordsfile" }' <(sort wordsfilemaster)

在 wordsfilemaster 包含原始字典文件的地方,对文件运行 sort 并将输出重定向回 awk。将该行附加到通过取该行的第一个字符生成的文件中,将其转换为大写,然后附加“_wordsfile”,例如 文件被创建为 A_wordsfile 或 O_wordsfile。