2016-01-20 82 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