簡體   English   中英

awk:在不同列中的正則表達式之間打印

[英]awk: Print between regexps which are in different columns

我正在嘗試在位於不同列的兩個正則表達式之間的文件中打印列的內容。 示例文件如下所示

Run Summary Paddle Status = 613  (hex 265) Cd+Bi paddle
   Run     To      Time    Current    C mon       Ufis      Charge
                   (sec)    (uA)                             (uC)
  23626   35950   1797.5     99.0   5.641e+05   2.289e+06   1.779e+05
  23630   34587   1729.3    104.9   5.439e+05   2.234e+06   1.815e+05
  23634   34982   1749.1     92.8   5.526e+05   2.100e+06   1.623e+05
  23638   35950   1797.5     95.0   5.698e+05   2.204e+06   1.707e+05
  23642   36135   1806.8     99.6   5.710e+05   2.317e+06   1.800e+05
  23646   36130   1806.5    100.0   5.747e+05   2.322e+06   1.807e+05
  23650   36121   1806.0    100.2   5.733e+05   2.324e+06   1.810e+05
  23654   36123   1806.2    100.2   5.752e+05   2.323e+06   1.809e+05
   Sum  2418821 120941.1            3.772e+07   1.513e+08   1.193e+07

Run Summary Paddle Status = 357  (hex 165) Cd paddle
   Run     To      Time    Current    C mon       Ufis      Charge
                   (sec)    (uA)                             (uC)
  23625   36001   1800.0    100.8   3.342e+05   2.329e+06   1.814e+05
  23629   36132   1806.6    100.8   3.307e+05   2.343e+06   1.821e+05
  23633   35882   1794.1     97.6   3.565e+05   2.257e+06   1.751e+05
  23637   36139   1807.0     99.3   3.545e+05   2.307e+06   1.795e+05
  23641   36133   1806.7     99.3   3.598e+05   2.307e+06   1.794e+05
  23645   36144   1807.2     99.7   3.635e+05   2.315e+06   1.802e+05
  23649   36132   1806.6    100.1   3.648e+05   2.321e+06   1.808e+05
  23653   36123   1806.2    100.1   3.695e+05   2.318e+06   1.808e+05
  23657   36152   1807.6     99.9   3.684e+05   2.318e+06   1.805e+05
   Sum  2404062 120203.1            2.186e+07   1.505e+08   1.193e+07

我需要做的是打印正則表達式Cd+Bi之后兩行之間出現的第一列,並且不包括Sum的第一次出現。 然后對正則表達式Cd重復相同的操作。 我的輸出將是兩個文件(雖然這不是嚴格的),它們將具有以下內容

帶有Cd+Bi文件

23626   
23630 
23634  
23638  
23642   
23646  
23650  

Cd文件

23625
23629
23633
23637
23641
23645
23649
23653
23657

我嘗試使用以下 oneliners,但無法重現我想要的內容。

  1. 這不會打印任何awk '$9 ~ /Cd+Bi/, $1 ~ /Sum/' file
  2. 這將打印包含 Sum awk '$9 ~ /Cd+Bi/{flag=1;next}$1 ~ /Sum/' file

關於如何產生所需輸出的任何想法?

$ awk '$9=="Cd+Bi",$1=="Sum"{ if ($1 ~ /^[0-9]+$/) print $1 }' file
23626
23630
23634
23638
23642
23646
23650
23654

請注意,最后一行包含23654 ,它沒有包含在您的示例中。

而對於Cd

$ awk '$9=="Cd",$1=="Sum"{ if ($1 ~ /^[0-9]+$/) print $1 }' file
23625
23629
23633
23637
23641
23645
23649
23653
23657

這是另一個awk解決方案:

使用Cd+Bi

awk -v s='Cd+Bi' '$9==s{p=1} $1=="Sum"{p=0} p && $1+0 == $1{print $1}' file

23626
23630
23634
23638
23642
23646
23650
23654

Cd

awk -v s='Cd' '$9==s{p=1} $1=="Sum"{p=0} p && $1+0 == $1{print $1}' file

23625
23629
23633
23637
23641
23645
23649
23653
23657

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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