[英]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,但無法重現我想要的內容。
awk '$9 ~ /Cd+Bi/, $1 ~ /Sum/' file
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.