find 명령이 출력을 제공하지 않습니다

find 명령이 출력을 제공하지 않습니다

이 명령이 나에게 출력을 제공하지 않는 이유를 아는 사람이 있습니까? 모든 변수가 정확하지만 결과가 없습니다.

찾다. -name "$cdr_type*$DAYZ*.unl*" |
  xargs zcat |
  awk -F "|" '{if ($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 |
  awk-F| '{if (4==20160928093911 &&2==2348094398953)}'|
  머리

내 관찰에 따르면 $14와 $22 대신 $4와 $2가 표시됩니다.

답변1

$14대부분의 Bourne 유사 쉘에서 쉘로 확장할 때와 동일 ${1}4하며 $1비어 있거나 설정되지 않은 경우 예상대로 제공됩니다 4. 여기서는 14번째 필드로 처리되도록 리터럴 $14을 전달하려고 합니다 .awkawk

일반적으로 작은따옴표 안에는 $1변수가 확장되지 않지만 어떻게 확장되는지는 알려주지 않았습니다.에코그 명령.

어쨌든 원하는 결과는 다음과 같습니다.

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

즉, 쉘 변수의 내용을 변수 로 $tdate전달하는 것 입니다.$misdnawk

관련 정보