2017-03-02 22 views
-2

如果最後5個字符串匹配特定輸入,我需要打印行的第一個字符串。如果最後5個字符串匹配輸入,打印第一個字符串

實施例:指定的輸入是2

India;1;2;3;4;5;6 
Japan;1;2;2;2;2;2 
China;2;2;2;2 
England;2;2;2;2;2 

預期輸出:

Japan 
England 

正如你可以看到,China被排除,因爲它不符合要求(最後5位必須是與輸入相匹配)。

+0

你有什麼試過,它是如何失敗?這應該可以在第一次提出Awk手冊的幾分鐘內完成。 – tripleee

回答

2
grep ';2;2;2;2;2$' file | cut -d';' -f1 
  • $在正則表達式代表「行結束」,所以grep的將打印所有給定字符串
  • -d';'在結束行告訴削減分隔用分號
  • -f1輸出列第一列
+0

謝謝Choroba。它的工作方式和預期的一樣。 – Sunny1985

0

隨着SED:

sed -n 's/^\([^;]*\).*;2;2;2;2;2$/\1/p' file 

它捕獲和線路輸出非;第一字符;2;2;2;2;2

它可以與GNU縮短sed將結束:

sed -nE 's/^([^;]*).*(;2){5}$/\1/p' file 
0

你可以使用awk

awk -F';' -v v="2" -v count=5 ' 
    { 
    c=0; 
    for(i=2;i<=NF;i++){ 
     if($i == v) c++ 
     if(c>=count){print $1;next} 
    } 
    }' file 

哪裏

  • v是匹配
  • count價值是價值的最大數目打印期望字符串
  • for循環解析與;分隔的所有字段,以便找到一個匹配

這腳本不需要5個值2是連續的。

0
awk -F\; '/;2;2;2;2;2$/{print $1}' file 
Japan 
England 
+1

雖然這段代碼片段是受歡迎的,並且可以提供一些幫助,但它會[如果包含* how *的解釋](// meta.stackexchange.com/q/114762) *爲什麼*這解決了這個問題。請記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。 –

相關問題