我是新編寫bash腳本並有以下問題;如何從包含多個遞增和遞減數字序列的列中提取範圍(第一個和最後一個值),該列可以增加或減少3,並在檢測到增量大於3時跳轉到下一個序列。例如:如何從包含多個序列的列中grep數值序列的範圍
1
4
7
20
23
26
100
97
94
它也需要接受作爲輸出:
1,7
20,26
100,94
我是新編寫bash腳本並有以下問題;如何從包含多個遞增和遞減數字序列的列中提取範圍(第一個和最後一個值),該列可以增加或減少3,並在檢測到增量大於3時跳轉到下一個序列。例如:如何從包含多個序列的列中grep數值序列的範圍
1
4
7
20
23
26
100
97
94
它也需要接受作爲輸出:
1,7
20,26
100,94
用awk:
$ awk 'NR==1||sqrt(($0-p)*($0-p))>3{print p; printf "%s", $0 ", "} {p=$0} END{print $0}' file
1, 7
20, 26
100, 94
解釋:
NR==1 || sqrt(($0-p)*($0-p))>3 { # if the abs($0-previous) > 3
print p # print previous to end a sequence and
printf "%s", $0 ", " # start a new sequence
}
{ p=$0 }
END { print $0 }
感謝James提供並解釋的解決方案,它符合我目前的需求。乾杯。 –
這個awk腳本給你預期的輸出:
awk '{v=$NF}
NR==1{printf "%s,",v;p=v;next}
(p-v)*(p-v)==9{p=v;next}
{printf "%s\n%s,",p,v;p=v}
END{print v}' file
不可能的'sed'(當然,現實,反正)。下面的awk解決方案看起來可用。另外,S.O.旨在幫助人們解決他們的編程問題,希望您能展示出解決問題的最佳嘗試。在此處發佈更多問題之前,請閱讀http://stackoverflow.com/tour,http://stackoverflow.com/help/how-to-ask,http://stackoverflow.com/help/dont-ask和http ://stackoverflow.com/help/mcve。祝你好運。 祝你好運。 – shellter
謝謝fedorqui,我的錯誤是沒有發佈我的第一次嘗試,很高興收到這些信息。乾杯。 –