bash - 从命令行输入结果不正确
问题描述
我正在尝试读取以表格格式输出的文件。我能够从 aws 区域读取具有卷描述、snapshotId 和 TimeStarted 列表的文件。我要求用户输入卷名并输出所输入卷的 snapshotId。该列表包含volumes0 到volumes30。
问题是,当用户输入Volume0时,它会正确输出snapshotId,但如果用户输入Volume20,它只会输出|。我的猜测是因为正在读取的原始文件是表格格式,它正在这样做。最初我虽然可以设置一个条件,如果用户输入 Volume0,则打印快照 ID,否则如果用户输入 Volume20,则打印快照 ID。
我正在寻找一种更好的方法来做到这一点。读取文件时如何忽略表格格式,我应该将其转换为文本格式吗?如何?或者我在阅读时如何忽略任何格式?这是我的 bash 脚本:
readoutput() {
echo "Hello, please tell me what Volume you are searching for..(Volume?):"
read volSearch
echo "Searching for newest SnapshotIds from /Users/User/Downloads/GetSnapId for:" $volSearch
sleep 5
input="/Users/User/Downloads/GetSnapId"
if x=$(grep -m 1 "$volSearch" "$input")
then
echo "$x"
else
echo "$volSearch not found..ending search"
fi
extractSnap=$(echo "$x" | grep "snap-" | awk '{print $7}')
echo $extractSnap
}
readoutput
解决方案
awk 不太聪明的问题,并尝试自动确定表格分隔符。在 Volume0 的第一行中,垂直线之前有空格,所以空格和垂直线都是分隔符,但在下一行,你没有空格,所以它占用了错误的列。接下来试试:
extractSnap=$(echo "$x" | cut -d'|' -f3 | cut -d'-' -f 2)
推荐阅读
- laravel - 有什么方法可以绕过在 Laravel 中使用数据库
- javascript - 如何解构嵌套道具?
- node.js - 使用 puppeteer 抓取动态站点
- python - 更新表单在 Django 中创建新对象
- vim - Vim - 改变当前 quickfix 行的高亮。(快速修复线)
- ensemble-learning - 使用集成模型的最佳方法是什么?
- c# - 通知 Visual Studio 通过反射调用的代码
- python - ModuleNotFoundError:没有名为“posts.urls”的模块
- python - MongoDB:列表对象
- python - 基于一列对numpy数组进行排序然后基于另一列进行子排序的最佳方法?