我是Bash脚本编程的新手,我想测试提取数据,我的计划是基于AWS从.sh文件(Bashscript)的查询将数据提取到一个.txt文件.我有一个更大的目标,但我想在输入我的主要AWS查询之前先完成这项工作.
I have a .sh script here below.个
NOTE: I put all values to -confidential- without any quotations. Just the value个
#!/bin/bash
variables () {
lambdas="confidential"
}
variables
queryId=$(aws logs start-query --log-group-name $lambdas --start-time 1695704400 --end-time 1695707999 --query-string 'filter @message like "requestId" | parse @message "operationName: '*'," as API | parse @message "status: *," as Status | parse @message "channel: '*'," as Channel | stats count(*) as Total by API,Channel,Status | sort API,Total desc' | jq '.queryId' | awk -F '"' '{print $2}')
results=$(aws logs get-query-results --query-id $queryId | jq .)
echo "$results" > testextract5.txt
Whenever I run that .sh file, this is the result .txt below:个
{
"results": [],
"statistics": {
"recordsMatched": 0,
"recordsScanned": 0,
"bytesScanned": 0
},
"status": "Running"
}
BUT when I manually copy paste each command from .sh file all the bash script in the git-bash command line, it works! See below:个
jomasangkay@DESKTOP-R1DM530:/mnt/c/Users/personal pc/Desktop/company/Bashscript/test$ queryId=$(aws logs start-query --log-group-name $lambdas --start-time 1695704400 --end-time 1695707999 --query-string 'filter @message like "requestId" | parse @message "operationName: '*'," as API | parse @message "status: *," as Status | parse @message "channel: '*'" as Channel | stats count(*) as Total by API,Channel,Status | sort API,Total desc' | jq '.queryId' | awk -F '"' '{print $2}')
jomasangkay@DESKTOP-R1DM530:/mnt/c/Users/personal pc/Desktop/company/Bashscript/test$ results=$(aws logs get-query-results --query-id $queryId | jq .)
jomasangkay@DESKTOP-R1DM530:/mnt/c/Users/personal pc/Desktop/company/Bashscript/test$ echo "$results" > testextract5.txt
RESULT extracted .txt below,个
{
"field": "API",
"value": "'Confidential'"
},
{
"field": "Channel",
"value": "'Confidential'"
},
{
"field": "Status",
"value": "Confidential"
},
{
"field": "Total",
"value": "1"
}
]
],
"statistics": {
"recordsMatched": 16507,
"recordsScanned": 69000,
"bytesScanned": 29835564
},
"status": "Complete"
}
采取的行动/future 计划:
我try 进行故障排除,并使用了bash-x脚本.sh,但我根本看不到任何问题.我try 回滚到WSL版本1,安装了AWS CLI的最新更新.这些都不管用.我的 playbook 有什么问题吗?
我希望当我运行.sh文件时,应该会有与上面的.txt结果类似的预期数据.我创建此bash脚本的主要目的是因为AWS Cloudwatch Log Insights具有与lambda相关的限制,因此我计划创建一个bash脚本,在$lambda中使用array.这篇文章仅供我试错之用.我需要让这件事继续下go .
=
try 对$lambda和$queryID使用双引号,结果相同,没有数据.在下面
jomasangkay@DESKTOP-R1DM530:/mnt/c/Users/personal pc/Desktop/company/Bashscript/test$ bash -x testing2.sh
+ variables
+ lambdas=confidential
++ jq .queryId
++ awk -F '"' '{print $2}'
++ aws logs start-query --log-group-name confidential --start-time 1695704400 --end-time 1695707999 --query-string 'filter @message like "requestId" | parse @message "operationName: *," as API | parse @message "status: *," as Status | parse @message "channel: *," as Channel | stats count(*) as Total by API,Channel,Status | sort API,Total desc'
+ queryId=0f6c6fd6-da5e-40ed-9c74-ad22791455be
++ aws logs get-query-results --query-id 0f6c6fd6-da5e-40ed-9c74-ad22791455be
++ jq .
+ results='{
"results": [],
"statistics": {
"recordsMatched": 0,
"recordsScanned": 0,
"bytesScanned": 0
},
"status": "Running"
}'
+ echo '{
"results": [],
"statistics": {
"recordsMatched": 0,
"recordsScanned": 0,
"bytesScanned": 0
},
"status": "Running"
}'
======
更新日期:2023-05:15新加坡时间10月3日
我通过创建一个名为test1.txt和test2.txt的2.txt文件隔离了这个问题,它们的内容如下所示:
test1.txt
c86c7f6b-95e4-4d17-9417-2f6987989316
test2.txt
c86c7f6b-95e4-4d17-9417-2f6987989316
正如您在上面看到的,它们具有完全相同的值(没有空格,没有不寻常的文本或其他任何东西).
See may new modified code below,个
#!/bin/bash
variables () {
lambdas="confidential"
}
variables
queryId=$(aws logs start-query --log-group-name "$lambdas" --start-time 1695704400 --end-time 1695707999 --query-string 'filter @message like "requestId"' | jq '.queryId' | awk -F '"' '{print $2}')
#NOT WORKING
echo $queryId > test1.txt
#WORKING
echo c86c7f6b-95e4-4d17-9417-2f6987989316 > test2.txt
queryIds=$(awk '{print $1}' test2.txt)
results=$(aws logs get-query-results --query-id $queryIds | jq .)
echo "$results" > testextract.txt
当我从test1.txt中赋值变量时,它不工作,没有提取数据.
当我从test2.txt赋值变量时,它按预期工作.
由于某种原因,看起来像是来自test1.txt查询id的值被转换为某种特殊字符,我不确定.