2015-02-09 78 views
1

查找數字範圍在這個awk腳本中,如果字段$ 5包含1900或更大的年份,我想打印出字段$ 2。找到的行號範圍

 
22,Grover Cleveland,http://en.wikipedia.org/wiki/Grover_Cleveland,4/03/1885,4/03/1889,Democratic ,Grover_Cleveland_2.jpg,thmb_Grover_Cleveland_2.jpg,New York 
23,Benjamin Harrison,http://en.wikipedia.org/wiki/Benjamin_Harrison,4/03/1889,4/03/1893,Republican ,BenjaminHarrison.gif,thmb_BenjaminHarrison.gif,Indiana 
24,Grover Cleveland (2nd term),http://en.wikipedia.org/wiki/Grover_Cleveland,4/03/1893,4/03/1897,Democratic ,Grover_Cleveland.jpg,thmb_Grover_Cleveland.jpg,New York 
25,William McKinley,http://en.wikipedia.org/wiki/William_McKinley,4/03/1897,14/9/1901,Republican ,WilliamMcKinley.gif,thmb_WilliamMcKinley.gif,Ohio 
26,Theodore Roosevelt,http://en.wikipedia.org/wiki/Theodore_Roosevelt,14/9/1901,4/3/1909,Republican ,TheodoreRoosevelt.jpg,thmb_TheodoreRoosevelt.jpg,New York 
27,William Howard Taft,http://en.wikipedia.org/wiki/William_Howard_Taft,4/3/1909,4/03/1913,Republican ,WilliamHowardTaft.jpg,thmb_WilliamHowardTaft.jpg,Ohio 
28,Woodrow Wilson,http://en.wikipedia.org/wiki/Woodrow_Wilson,4/03/1913,4/03/1921,Democratic ,WoodrowWilson.gif,thmb_WoodrowWilson.gif,New Jersey 
29,Warren G. Harding,http://en.wikipedia.org/wiki/Warren_G._Harding,4/03/1921,2/8/1923,Republican ,WarrenGHarding.gif,thmb_WarrenGHarding.gif,Ohio 
30,Calvin Coolidge,http://en.wikipedia.org/wiki/Calvin_Coolidge,2/8/1923,4/03/1929,Republican ,CoolidgeWHPortrait.gif,thmb_CoolidgeWHPortrait.gif,Massachusetts 
31,Herbert Hoover,http://en.wikipedia.org/wiki/Herbert_Hoover,4/03/1929,4/03/1933,Republican ,HerbertHover.gif,thmb_HerbertHover.gif,Iowa 

這是我到目前爲止做的,但它給我不僅僅包含歲的人大於1900年

#!/bin/awk -f 

BEGIN{ FS=","; 
}{ 
if($5 >= 1900) 
{ print $2;} 
+2

您發佈的示例輸入是未格式化的,因此模糊(線條實際上會中斷?),並且您發佈的awk腳本有語法錯誤,因此您運行的那個輸出並不是意料之外,因此我們無法幫助您調試該腳本。請更新您的問題以糾正這兩個問題並提供預期的輸出。 – 2015-02-09 23:09:29

回答

0

你搞亂了括號中的所有行:

#!/bin/awk -f 

BEGIN{ FS=","; 
}{ 
if($5 >= 1900) print $2;} 
4

年度以4/03/1885的形式出現。需要一個額外的步驟年內拆分日期,並得到:

$ awk -F, '{split($5,mdy,"/")} mdy[3]>=1900{print $2}' file 
William McKinley 
Theodore Roosevelt 
William Howard Taft 
Woodrow Wilson 
Warren G. Harding 
Calvin Coolidge 

工作原理:

  • -F,

    使用逗號作爲字段分隔符。

  • split($5, mdy, "/")

    拆分第五字段在/並將結果置於陣列mdy英寸

  • mdy[3]>=1900{print $2}

    選擇年大於或等於1900和打印領域2.

1

另一種方法是使用awk的匹配和子功能

awk -v FS="," 'match($5,/[0-9]{4}/){name=substr($5,RSTART,RLENGTH)};{if(name>=1900){print $0}}' 

結果

方式
25,William McKinley,http://en.wikipedia.org/wiki/William_McKinley,4/03/1897,14/9/1901,Republican ,WilliamMcKinley.gif,thmb_WilliamMcKinley.gif,Ohio 
26,Theodore Roosevelt,http://en.wikipedia.org/wiki/Theodore_Roosevelt,14/9/1901,4/3/1909,Republican ,TheodoreRoosevelt.jpg,thmb_TheodoreRoosevelt.jpg,New York 
27,William Howard Taft,http://en.wikipedia.org/wiki/William_Howard_Taft,4/3/1909,4/03/1913,Republican ,WilliamHowardTaft.jpg,thmb_WilliamHowardTaft.jpg,Ohio 
28,Woodrow Wilson,http://en.wikipedia.org/wiki/Woodrow_Wilson,4/03/1913,4/03/1921,Democratic ,WoodrowWilson.gif,thmb_WoodrowWilson.gif,New Jersey 
29,Warren G. Harding,http://en.wikipedia.org/wiki/Warren_G._Harding,4/03/1921,2/8/1923,Republican ,WarrenGHarding.gif,thmb_WarrenGHarding.gif,Ohio 
30,Calvin Coolidge,http://en.wikipedia.org/wiki/Calvin_Coolidge,2/8/1923,4/03/1929,Republican ,CoolidgeWHPortrait.gif,thmb_CoolidgeWHPortrait.gif,Massachusetts 
31,Herbert Hoover,http://en.wikipedia.org/wiki/Herbert_Hoover,4/03/1929,4/03/1933,Republican ,HerbertHover.gif,thmb_HerbertHover.gif,Iowa