我有一个庞大的字典文件,其中包含每行中的每个单词,并希望按照单词的第一个字符拆分文件。
a.txt - >仅包含以
开头的单词我使用这个awk命令成功提取以b开头的单词。
awk 'tolower($0)~/^b/{print}' titles-sorted.txt > b.txt
现在我想为所有字母迭代这个
for alphabet in {a..z}
do
awk 'tolower($0)~/^alphabet/{print}' titles-sorted.txt > titles-links/^alphabet.txt
done
但结果文件不包含任何内容。我做错了什么?我甚至不知道如何调试它。谢谢!
答案 0 :(得分:2)
因为你的awk程序是单引号,所以不会有任何shell变量扩展。在这个例子中:
awk 'tolower($0)~/^alphabet/{print}' titles-sorted.txt > titles-links/^alphabet.txt
...您正在寻找以文字字符串alphabet
开头的行。
这样可行:
awk "tolower(\$0)~/^$alphabet/{print}" titles-sorted.txt > titles-links/$alphabet.txt
注意几点:
$
中的$0
,否则shell会扩展它。alphabet
替换为$alphabet
,因为这是您引用shell变量的方式。^alphabet
替换为传递给$alphabet
的文件名中的>
。您还可以将shell变量转换为带有-v
的awk变量,并执行以下操作:
for alphabet in {a..z} ; do
awk -valphabet=$alphabet 'tolower($0)~"^"alphabet {print}' /usr/share/dict/words > words-$alphabet.txt
done