Bash 在AWK命令上循环不';行不通
我有一个巨大的字典文件,包含每行中的每个单词,并希望按单词的第一个字符分割这些文件 a、 txt-->仅包含以字母开头的单词 我使用这个awk命令成功地提取了以b开头的单词Bash 在AWK命令上循环不';行不通,bash,awk,Bash,Awk,我有一个巨大的字典文件,包含每行中的每个单词,并希望按单词的第一个字符分割这些文件 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-s
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
但结果文件不包含任何内容。我做错了什么?我甚至不知道如何调试这个。谢谢 因为您的awk程序是单引号,所以不会有任何shell变量展开。在本例中:
awk 'tolower($0)~/^alphabet/{print}' titles-sorted.txt > titles-links/^alphabet.txt
…您正在查找以文字字符串字母表
开头的行
这将有助于:
awk "tolower(\$0)~/^$alphabet/{print}" titles-sorted.txt > titles-links/$alphabet.txt
请注意以下几点:
- 我们使用双引号,它不会阻止shell变量的扩展
- 我们需要在
中转义$0
,否则shell将扩展它$
- 我们需要用
替换$alphabet
,因为这就是您引用shell变量的方式alphabet
- 我们需要将传递给
的文件名中的
替换为^alphabet
$alphabet
-v
将shell变量转换为awk变量,并执行以下操作:
for alphabet in {a..z} ; do
awk -valphabet=$alphabet 'tolower($0)~"^"alphabet {print}' /usr/share/dict/words > words-$alphabet.txt
done