Linux 按字母顺序对单词排序并为每个字母制作一个文件
Linux Sort words alphabetically and make a file for each letter
我想编写一个 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 [=10=] >> toupper(substr([=10=],1,1))"_wordsfile" }' <(sort wordsfilemaster)
其中 wordsfilemaster 包含原始字典文件,运行 对文件进行排序并将输出重定向回 awk。将该行附加到通过获取该行的第一个字符生成的文件,将其转换为大写,然后附加“_wordsfile”,例如
文件创建为 A_wordsfile 或 O_wordsfile.
我想编写一个 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 [=10=] >> toupper(substr([=10=],1,1))"_wordsfile" }' <(sort wordsfilemaster)
其中 wordsfilemaster 包含原始字典文件,运行 对文件进行排序并将输出重定向回 awk。将该行附加到通过获取该行的第一个字符生成的文件,将其转换为大写,然后附加“_wordsfile”,例如 文件创建为 A_wordsfile 或 O_wordsfile.