awk 不報錯的問題

2021-10-02 11:06:41 字數 1457 閱讀 8476

#awk 和 grep 的退出狀態不同

#awk 不報錯

#linux 判斷乙個變數是否為空值

寫了乙個shell指令碼,把本來用grep的部分改用了awk,發現原來的報錯部分不能用了。

比如這個用grep的**,檔案中有的單詞才輸出"word is in the file."

#!/bin/bash

set -euo pipefail

for a in

cat dog

do ret=0

grep -w $a copy.txt ||ret=

$?if

[$ -eq 1 ]

;then

continue

fiecho

"word $a is in the file."

done

把grep的部分換成了awk,檔案中沒有的單詞也會輸出"word is in the file."

原來awk的退出狀態是0,並不會像grep這樣如果查詢不到返回錯誤,即狀態1。

(關於linux的退出狀態 小知識 linux 退出狀態碼)

針對某些列存在欄位的缺失,awk並不會報錯,而是輸出空值

然而使用grep時,找到匹配的任意一行,退出狀態為0,否則為1。

示例,

# 使用的檔案,其中沒有"cat"這個詞

$ cat copy.txt

rabbit

dog# 用grep查詢"cat",退出碼為1

$ grep

"cat" copy.txt

$ echo$?1

# 用awk查詢"cat",退出碼為0

$ awk

'/cat/' copy.txt

$ echo

$?0

解決上面的grep**部分更換為awk**部分遇到的問題。

把判斷退出狀態碼的部分,換成判斷輸出是否為空。

知識點,判斷乙個變數是否為空值,用-z

# 判斷變數是否為空值

if[ -z "$string"];

then

# 處理部分

fi

修改後的使用awk的**,

#!/bin/bash

set -euo pipefail

for a in

cat dog

do result=

$(awk

'/'$a'/' copy.txt)

if[ -z "$"];

then

continue

fiecho

"word $a is in the file."

done

(以上。)

vs生成失敗不報錯

vs生成失敗不報錯 問題描述 一台機子copy到另一台機子 第一台用的xp系統,vs2005 framework2.0 第二台win7 用的vs2011 生成失敗的原因 裡邊有的dll在win7裡邊沒有註冊 也就是出現黃嘆號 由於警告七百多條 呵呵 重要的資訊看不到,所以也不知道哪錯了 解決辦法 專...

php不報錯該怎麼辦,探尋PHP指令碼不報錯的原因

php程式錯誤一般有三種 語法錯誤,執行時錯誤,邏輯錯誤。那麼如果php指令碼不報語法錯,會是什麼原因呢 1.一般的整合環境,缺省會開啟錯誤報告 但在linux系統中,使用軟體包安裝的就不一定了,此時可以檢視php配置檔案,開啟錯誤報告 display errors on php配置檔案路徑 uer...

python3中子程序不報錯的問題

昨天學了下子程序建立,然後自己做例項的時候,發現子程序不執行,而是直接結束了主程序。由於是子程序,所以有沒有錯誤看不見。結果就是 start end 錯誤原因是定義worker時,os.getpid 寫錯 之後在函式中加入異常處理即可發現錯誤,即 def worker msg try t start...