[英]Loop over column of file in bash
我有一行超過70.000行和11列。 第四列是一個位置。 我想計算位置比上一行中的位置高100且比下一行中的位置低100的每一行。
我希望不將數據導入R來執行此操作,因此可以將其放入Shell腳本中。 但是我在shell方面經驗不足。
數據示例:
x y z 1
x y z 80
x y z 200
x y z 310
x y z 390
x y z 500
x y z 830
我想將第3行和第6行計數為第4列中的值滿足我的要求,因此這里的輸出應為“ 2”。
我試圖搜索有關如何執行此操作的信息,但已經停留了一段時間。
敬請解救!
$ awk '$4>p+100 && p>pp+100{c++} {pp=p;p=$4} END{print c}' file
2
說明
$4>p+100 && p>pp+100{c++}
如果字段4大於prev + 100並且prev大於prev prev + 100遞增計數器(從零初始值開始)
{pp=p;p=$4}
設置新的prev prev和prev
完成所有行后, END{print c}
打印計數器。
您可以使用以下awk:
awk 'srec && NR==srec+1 && $4>sv+100{count++; sv=srec=0}
frec && NR==frec+1 && $4>fv+100{fv=frec=0; sv=$4; srec=NR}
{fv=$4; frec=NR}
END{print count}' file
2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.