问题描述
我想编写一个 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.txt、b.txt 等,每个都包含以该字母开头的所有单词。
解决方法
你可以用 awk 做到这一点:
awk '{ print $0 >> toupper(substr($0,1,1))"_wordsfile" }' <(sort wordsfilemaster)
在 wordsfilemaster 包含原始字典文件的地方,对文件运行 sort 并将输出重定向回 awk。将该行附加到通过取该行的第一个字符生成的文件中,将其转换为大写,然后附加“_wordsfile”,例如 文件被创建为 A_wordsfile 或 O_wordsfile。