Shell-Script
查找命令沒有給出任何輸出
請問有人知道為什麼這個命令沒有給我任何輸出嗎?所有變數都是正確的,但沒有結果。
尋找 。-name "$cdr_type*$DAYZ*.unl*" | xargs zcat | awk -F "|" '{if( **$14** ==$tdate && **$22** ==$misdn) 列印 $0}'| 頭
當我像這樣回顯命令時
echo "find . -name $cdr_type*$DAYZ*.unl* | xargs zcat | awk -F | '{if($14==$tdate && $22==$misdn) print $0}'|head"
這是我的輸出:
尋找 。-名稱經理*20160928*.unl* | xargs zcat | awk -F | '{if( **4** ==20160928093911 && **2** ==2348094398953)}'| 頭
我的觀察是它的表現 $ 4 and $ 2代替 $ 14 and $ 22
$14
當在大多數 Bourne-like shell 中由 shell 擴展時,它與 相同${1}4
,如果$1
為空或未設置,則按4
預期給出。在這裡,您想傳遞一個 litteral$14
以awk
將awk
其視為第 14 個欄位。通常在單引號內,該
$1
變數不會被擴展,但您並沒有告訴我們您如何回顯該命令。無論如何,在這裡,看起來你想要:
find . -name "$cdr_type*$DAYZ*.unl*" -exec zcat {} + | awk -F "|" -v tdate="$tdate" -v misdn="$misdn" ' $14 == tdate && $22 == misdn' | head
也就是將
$tdate
和$misdn
shell 變數的內容作為awk
變數傳遞。