[20210924]awk奇怪的輸出2.txt

lfree發表於2021-09-24

[20210924]awk奇怪的輸出2.txt

--//上班測試再次遇到奇怪的問題,自己記錄一下.

1.環境:
SCOTT@book> @ ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

2.測試:
$ sqlplus -s -l scott/book <<< "select empno,deptno,sal,comm from emp;"

     EMPNO     DEPTNO        SAL       COMM
---------- ---------- ---------- ----------
      7369         20        800
      7499         30       1600        300
      7521         30       1250        500
      7566         20       2975
      7654         30       1250       1400
      7698         30       2850
      7782         10       2450
      7788         20       3000
      7839         10       5000
      7844         30       1500          0
      7876         20       1100
      7900         30        950
      7902         20       3000
      7934         10       1300
14 rows selected.

$ sqlplus -s -l scott/book <<< "select empno,deptno,sal,comm from emp;" | awk '$4 >=0 {print $0 }'
     EMPNO     DEPTNO        SAL       COMM
      7499         30       1600        300
      7521         30       1250        500
      7654         30       1250       1400
      7844         30       1500          0
--//輸出header是對的,awk當作字串比較.

$ sqlplus -s -l scott/book <<< "select empno,deptno,sal,comm from emp;" | awk '$4*1 >=0 {print $0 }'
     EMPNO     DEPTNO        SAL       COMM
---------- ---------- ---------- ----------
      7369         20        800
      7499         30       1600        300
      7521         30       1250        500
      7566         20       2975
      7654         30       1250       1400
      7698         30       2850
      7782         10       2450
      7788         20       3000
      7839         10       5000
      7844         30       1500          0
      7876         20       1100
      7900         30        950
      7902         20       3000
      7934         10       1300
14 rows selected.
--//當欄位不存在時$4*1 當作0 ,這樣符合條件.看如下輸出.

$ sqlplus -s -l scott/book <<< "select empno,deptno,sal,comm from emp;" | awk '$4*1 >0 {print $0 }'
      7499         30       1600        300
      7521         30       1250        500
      7654         30       1250       1400

--//也就是awk把位置引數不存在時數字當作0來處理了.如何解決呢?
--//我自己也沒有想到什麼好方法改寫如下:

$ sqlplus -s -l scott/book <<< "select empno,deptno,sal,comm from emp;"  |  awk '$4+0 >0 || $4=='0' {print $0 }'
      7499         30       1600        300
      7521         30       1250        500
      7654         30       1250       1400
      7844         30       1500          0

--//重點了解這些細節.



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2793427/,如需轉載,請註明出處,否則將追究法律責任。

相關文章