首页 > 解决方案 > 从命令行输入结果不正确

问题描述

我正在尝试读取以表格格式输出的文件。我能够从 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

标签: bashaws-cli

解决方案


awk 不太聪明的问题,并尝试自动确定表格分隔符。在 Volume0 的第一行中,垂直线之前有空格,所以空格和垂直线都是分隔符,但在下一行,你没有空格,所以它占用了错误的列。接下来试试:

extractSnap=$(echo "$x" | cut -d'|' -f3 | cut -d'-' -f 2)

推荐阅读