我正在學習awk,並且無法將變量傳遞給腳本並將其用作正則表達式搜索模式的一部分。將變量傳遞給awk並在正則表達式中使用它
這個例子是人爲的,但顯示我的探頭。
我的數據是這樣的:
Eddy Smith 0600000000 1981-07-16 Los Angeles
Frank Smith 0611111111 1947-04-29 Chicago
Victoria McSmith 0687654321 1982-12-16 Los Angeles
Barbara Smithy 0633244321 1984-06-24 Boston
Jane McSmithy 0612345678 1947-01-15 Chicago
Grace Jones 0622222222 1985-10-07 Los Angeles
Bernard Jones 0647658763 1988-01-01 New York
George Jonesy 0623428948 1983-01-01 New York
Indiana McJones 0698732298 1952-01-01 Miami
Philip McJonesy 0644238523 1954-01-01 Miami
我想awk腳本,我可以傳遞一個變量,然後讓awk腳本做一個正則表達式的變量。 我有這個腳本現在叫做「003_search_persons.awk」。
#this awk script looks for a certain name, returns firstName, lastName and City
#print column headers
BEGIN {
printf "firstName lastName City\n";
}
#look for the name, print firstName, lastName and City
$2 ~ name {
printf $1 " " $2 " " $5 " " $6;
printf "\n";
}
我所說的腳本是這樣的:
awk -f 003_search_persons.awk name=Smith 003_persons.txt
它返回以下,這是很好的。
firstName lastName City
Eddy Smith Los Angeles
Frank Smith Chicago
Victoria McSmith Los Angeles
Barbara Smithy Boston
Jane McSmithy Chicago
但是現在我想尋找一個特定的前綴「Mc」。我當然可以硬編碼,但我想要一個靈活的awk腳本。我在003_search_persons_prefix.awk中寫了以下內容。
#this awk script looks for a certain prefix to a name, returns firstName, lastName and City
#print column headers
BEGIN {
printf "firstName lastName City\n";
}
#look for the prefix, print firstName, lastName and City
/^prefix/{
printf $1 " " $2 " " $5 " " $6;
printf "\n";
}
我這樣調用腳本:
awk -f 003_search_persons_prefix.awk prefix=Mc 003_persons.txt
但現在它找到任何記錄。
問題是搜索模式「/^prefix /」。我知道我可以用一個非正則表達式替換搜索模式,就像在第一個腳本中一樣,但是假設我想用正則表達式來完成,因爲我需要前綴真正處於lastName字段的開頭,因爲它應該是,作爲前綴和所有;-)
我該怎麼做?
清理:擺脫所有的空語句(尾隨分號),變化的printf「的\ n 「來簡單地打印」「,並將printf $ 1」「$ 2等改爲簡單地打印$ 1,$ 2等。 – 2012-11-13 18:12:30