find 命令没有给出任何输出

find 命令没有给出任何输出

请问有人知道为什么这个命令没有给我任何输出吗?所有变量都是正确的,但没有结果。

寻找 。 -name "$cdr_type*$DAYZ*.unl*" |
  xargs zcat | xargs
  awk -F“|” '{如果(14 美元==$t日期 &&22 美元==$misdn) 打印 $0}'|

当我像这样回显命令时

echo "find . -name $cdr_type*$DAYZ*.unl* | xargs zcat | awk -F | '{if($14==$tdate && $22==$misdn) print $0}'|head" 

这是我的输出:

寻找 。 -名称 mgr*20160928*.unl* |
  xargs zcat | xargs
  awk-F| '{如果(4==20160928093911 &&2==2348094398953)}'|

我的观察是它显示 4 美元和 2 美元,而不是 14 美元和 22 美元

答案1

$14当由大多数类似 Bourne 的 shell 中的 shell 展开时,与 相同${1}4,并且如果$1为空或未设置,则按4预期给出。在这里,您想要传递一个文字$14awk以便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$misdnshell 变量的内容作为awk变量传递。

相关内容