Shell-Script

查找命令沒有給出任何輸出

  • October 5, 2016

請問有人知道為什麼這個命令沒有給我任何輸出嗎?所有變數都是正確的,但沒有結果。

尋找 。-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$14awkawk其視為第 14 個欄位。

通常在單引號內,該$1變數不會被擴展,但您並沒有告訴我們您如何顯該命令。

無論如何,在這裡,看起來你想要:

find . -name "$cdr_type*$DAYZ*.unl*" -exec zcat {} + |
 awk -F "|" -v tdate="$tdate" -v misdn="$misdn" '
  $14 == tdate && $22 == misdn' |
head

也就是將$tdate$misdnshell 變數的內容作為awk變數傳遞。

引用自:https://unix.stackexchange.com/questions/314269