이 명령이 나에게 출력을 제공하지 않는 이유를 아는 사람이 있습니까? 모든 변수가 정확하지만 결과가 없습니다.
찾다. -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
을 전달하려고 합니다 .awk
awk
일반적으로 작은따옴표 안에는 $1
변수가 확장되지 않지만 어떻게 확장되는지는 알려주지 않았습니다.에코그 명령.
어쨌든 원하는 결과는 다음과 같습니다.
find . -name "$cdr_type*$DAYZ*.unl*" -exec zcat {} + |
awk -F "|" -v tdate="$tdate" -v misdn="$misdn" '
$14 == tdate && $22 == misdn' |
head
즉, 쉘 변수의 내용을 변수 로 $tdate
전달하는 것 입니다.$misdn
awk