Как запустить 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).

Другие вопросы по тегам