簡體   English   中英

使用bash shell腳本和awk提取數字

[英]extract numbers using bash shell script and awk

數據:

 61      -3.5527      1.00000
 62      -3.4695      1.00000
 63      -3.4545      1.00000
 64      -3.1462      1.00000
 65      -1.4512      0.00000
 66      -1.1737      0.00000
 67      -0.8792      0.00000
 61      -3.5590      1.00000
 62      -3.4763      1.00000
 63      -3.4557      1.00000
 68      -3.1533      1.00000
 69      -1.4382      0.00000
 70      -1.1616      0.00000
 71      -0.8638      0.00000

我期望的是:

文件1:

 64      -3.1462      1.00000
 68      -3.1533      1.00000

文件2:

 65      -1.4512      0.00000
 69      -1.4382      0.00000

我想通過簡單地使用bash shell和awk來獲取file1和file2。 如何找到第三列的值從1更改為0的兩行? 提前謝謝!

試試這個awk腳本:

NR == 1 { last = $3; }
last == 1 && $3 == 0 { print previous > "file1" ; print $0 > "file2" ; }
last != $3 { last = $3; }
{ previous = $0 }

如下所示:如果行號為1,則將第三列記錄為last 如果last等於1,並且當前行的第三列等於0,則將變量的內容打印到file1 previous ,將當前行打印到file2。 如果last的值不等於當前行的第三列,則更改變量的值。 最后,將當前行記錄為previous ,以用於第二條規則。

由於實際上不必初始化last或檢查第三列的值是否已更改,因此可以將腳本縮短為:

last == 1 && $3 == 0 { print previous > "file1" ; print $0 > "file2" ; }
{ last = $3; previous = $0 }
 awk  'BEGIN{prev=1; prevRec=""} prev == 1  && prevRec != "" && $3 == 0{print $0 > "file1";print prevRec > "file2"} {prev = $3; prevRec=$0}' file
awk '{ tmp=match($3,/[1][.]?????/) ; if (tmp) { lineone=$0 ; newzero=0 ;} else if ( newzero <1) { onechanged[lineone]=1 ; zerochanged[$0]=1 ; newzero=1} } END { print "File1 is: " ; for (key in onechanged){ print key } ; print "File2 is:" ; for (key in zerochanged){ print key }}' test.txt

輸出是:

File1 is:
 64      -3.1462      1.00000
 68      -3.1533      1.00000
 File2 is:
 69      -1.4382      0.00000
 65      -1.4512      0.00000

長版

awk '
  NR>1 && last==1 && $3==0 {
    print last_line > "file1"
    print $0 > "file2"
  }
  {
     last=$3
     last_line=$0
  }
' input.txt

簡潔版本

awk 'NR>1&&x==1&&$3==0{print y>"file1";print $0>"file2"}{x=$3;y=$0}' input.txt

暫無
暫無

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

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