2016-01-20 79 views
-2

我有一个巨大的字典文件,其中包含每行中的每个单词,并希望通过单词的第一个字符分割文件。循环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-sorted.txt > titles-links/^alphabet.txt 
    done 

但结果文件不包含任何内容。我做错了什么?我甚至不知道如何调试。谢谢!

回答

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 

注意几点:

  • 我们使用双引号,不抑制shell变量扩展。
  • 我们需要跳过$$0,否则shell会扩展它。
  • 我们需要用$alphabet替换alphabet,因为这就是你如何引用shell变量。
  • 我们需要用$alphabet替换^alphabet,并将其传递给>

你也可以改变shell变量为一个awk变量,-v,并做到这一点:

for alphabet in {a..z} ; do 
    awk -valphabet=$alphabet 'tolower($0)~"^"alphabet {print}' /usr/share/dict/words > words-$alphabet.txt 
done