2013-01-22 193 views
0
file.txt 

file format = cust:hdb 

file data = ted Ref:4rm 

讀-p 「卡斯特:」 卡斯特AWK忽略大小寫

用戶鍵入:泰德REF

grep -i -q "$cust" "file" 

系統能夠忽略大小寫和讀出的輸入

read -p "NewCust:" cust2 

用戶鍵入:Ted Ref

AWK -F:-v OFS =:-v CUST = 「$卡斯特」 -v卡斯特= 「$ cust2」 -v HDB = 「$ HDB」 1「$ == CUST & & $ 2 == hdb {$ 1 = cust2;} 1'文件

我該如何設置,以便awk可以忽略大小寫並更新到文件?

回答

4

除了IGNORECASE,可你匹配GNU awk爲小寫與tolower()的項目轉換。

awk -F : -v OFS=: -v cust="$cust" -v cust="$cust2" -v hdb="$hdb" 'tolower($1)==cust && tolower($2)==hdb {$1=cust2;}1' 

GNU awk文檔提供了區分大小寫的this page

+0

+1爲正確的解決方案,它可以在任何現代的awk中工作,而不僅僅是gawk。 –

+0

你是不是指'tolower($ 1)== tolower(cust)'? –

+0

@glennjackman是的,它可能應該是因爲它來自用戶輸入。 – jordanm

0

方式一:

IGNORECASE=1 awk -F : -v OFS=: -v cust="$cust" -v cust="$cust2" -v hdb="$hdb" '$1==cust && $2==hdb {$1=cust2;}1' file 
+0

它不工作.. – user1745860

+0

@ user1745860我相信我修正了他的例子。我不想複製答案,因爲他正確地設置了環境中的'IGNORECASE = 1'。 – jordanm

+0

@jordanm:設置IGNORECASE:我認爲不管它是在開始還是在結束都應該沒有問題,不是嗎? – Guru