如果最後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位必須是與輸入相匹配)。
如果最後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位必須是與輸入相匹配)。
grep ';2;2;2;2;2$' file | cut -d';' -f1
$
在正則表達式代表「行結束」,所以grep的將打印所有給定字符串-d';'
在結束行告訴削減分隔用分號-f1
輸出列第一列謝謝Choroba。它的工作方式和預期的一樣。 – Sunny1985
隨着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
你可以使用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
是連續的。
awk -F\; '/;2;2;2;2;2$/{print $1}' file
Japan
England
雖然這段代碼片段是受歡迎的,並且可以提供一些幫助,但它會[如果包含* how *的解釋](// meta.stackexchange.com/q/114762) *爲什麼*這解決了這個問題。請記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。 –
你有什麼試過,它是如何失敗?這應該可以在第一次提出Awk手冊的幾分鐘內完成。 – tripleee