簡體   English   中英

在bash中循環遍歷文件列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM