Как запустить Logparser из оболочки Bash
Я на Windows, я открываю оболочку git bash и запускаю
logparser "select date from testFile.log" -i:IISW3C -o:CSV
Это работает.
Но если я создаю.sh файл с
cmd_to_run='logparser "select date from testFile.log" -i:IISW3C -o:CSV'
$cmd_to_run
Это не работает, и я получаю ошибку logparser:
Error: detected extra argument ""select" after query
Мне нужно запустить logparser только через скрипт.sh. Можете ли вы помочь?
2 ответа
Во-первых, почему бы вам просто не запустить его напрямую?
Избегайте пробелов в запросе, поскольку bash расширяет его, и вы получаете позиционные аргументы в logparser вместо сохраненной строки. Если это не сработает, попробуйте eval
,
Чтобы проиллюстрировать, вот аналогичный пример с wc:
$ wc -w <<< "select date from testFile.log"
4
$ cmd_to_run='wc -w <<< "select date from testFile.log"'
$ $cmd_to_run
wc: <<<: No such file or directory
wc: "select: No such file or directory
wc: date: No such file or directory
wc: from: No such file or directory
wc: testFile.log": No such file or directory
0 total
$ eval $cmd_to_run # quote as appropriate
4
На самом деле я занимаюсь этим годами. Это значительно улучшает читаемость запросов, чем запуск из командной строки. Вот пример сценария оболочки, который я запускаю в Cygwin Bash.
dumpBiz_All_aspx.sh:
#! /usr/bin/bash
# cd /cygdrive/c/apps/jsd/log_analysis
# . ./dumpBiz_All_aspx.sh
REPORT_NAME=all_aspx
ROOTDIR=D:\\_other\\access_log_analysis
LOGDIR=${ROOTDIR}\\new_server
LOGDATE=21*
SITE=mysite
DATE=`date +%y%m%d.%H%M%S`
OUTPUT_FILE=C:\\apps\\jsd\\log_analysis\\reports\\${SITE}_${REPORT_NAME}_${DATE}.csv
SQL=$(cat <<-EOF
SELECT To_Lowercase(cs-uri-stem) as Res, cs-method as Method, COUNT(*) as Hits
INTO ${OUTPUT_FILE}
FROM ${LOGDIR}\\u_ex${LOGDATE}.log
WHERE Res LIKE '%.aspx'
AND sc-status = 200
AND cs-host > ''
AND cs-host NOT LIKE '192%'
AND Res LIKE '/${SITE}/%'
GROUP BY Res, cs-method
ORDER BY Hits DESC
EOF
)
echo SQL = $SQL
echo
cat << EOF | sh
LogParser -i:IISW3C "${SQL}" -o:CSV
EOF
echo Launching $OUTPUT_FILE ...
cmd.exe /c start ${OUTPUT_FILE}
Выход:
SQL = SELECT To_Lowercase(cs-uri-stem) as Res, cs-method as Method, COUNT(*) as Hits INTO C:\apps\jsd\log_analysis\reports\mysite_all_aspx_211005.155939.csv FROM D:\_other\access_log_analysis\new_server\u_ex21*.log WHERE Res LIKE '%.aspx' AND sc-status = 200 AND cs-host > '' AND cs-host NOT LIKE '192%' AND Res LIKE '/backoffice/%' GROUP BY Res, cs-method ORDER BY Hits DESC
Statistics:
-----------
Elements processed: 55780063
Elements output: 167
Execution time: 240.30 seconds (00:04:0.30)
Launching report: mysite_all_aspx_20211005.155442.csv ...
Это создает файл вроде
mysite_all_aspx_20211005.155442.csv
и открывается в программе чтения CSV по умолчанию (например, в Excel).