【发布时间】:2018-08-30 11:03:31
【问题描述】:
我对 bash 命令输出有疑问。 我想将命令的结果保存到数组中,并将第一部分切割成 [0] 并将第二部分切割成 [1]
result=$(findId PATTERN | tr -s " " | cut -d " " -f 1)
findID 的输出是:
id errorcode nameOfProgramRunned
示例:
12345 "compilation problem" fullScan.java
12346 "other problem" basicTest.java
我想将id 保存到array[0] 和nameofProgramRunned 到array[1]
主要问题是我想避免两次执行命令,因为结果可能不同。
当前代码:
#!/bin/sh
echo 'Enter error code:'
read errorLine
result=$(findID PATTERN | awk '{print $1}')
while read -r line
do
dir="/proj/jobs/"$line"/screenlog.*"
if [ -e $dir ]
then
if grep -qi "$errorLine" $dir
then
echo -e "\e[101m$line:\e[49m"
grep $dir -i -e "$errorLine"
fi
fi
done <<<"$result"
我想将 nameOfProgramRunned 添加到最终的 grep 中
我正在使用 bash
【问题讨论】:
-
都到
array[0]?您可能打算使用array[1] -
是的,这是一个错误。我不想保存到数组[1]
-
如果
findID可以返回更易解析的内容,例如制表符分隔的记录或 JSON,那就更好了。 -
已更改
findID现在以制表符分隔 -
你能澄清你想用多行输出发生什么吗?您想将
id保存到array[0],但在您的示例中,有两个ID,12345 和12346。您要为处理的每一行覆盖array,还是追加或其他内容?
标签: bash