从命令行输入结果不正确

Input from command line with incorrect result

我正在尝试读取以 table 格式输出的文件。我能够从 aws 区域读取具有卷描述、snapshotId 和 TimeStarted 列表的文件。我要求用户输入卷名并输出输入的卷的 snapshotId。该列表包含卷 0 到卷 30。

问题是,当用户输入Volume0时,它会正确输出snapshotId,但如果用户输入Volume20,它只会输出|。我的猜测是因为正在读取的原始文件是 table 格式,它正在这样做。最初我虽然可以设置一个条件,如果用户输入 Volume0,则打印 snapshotId,否则如果用户输入 Volume20,则打印 snapshotid。

我正在寻找更好的方法来做到这一点。如何在读取文件时忽略table格式,是否应该将其转换为文本格式?如何?或者阅读时如何忽略任何格式?这是我的 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 }')

        echo $extractSnap

}

readoutput

awk 不太聪明,并尝试自动确定 table 分隔符的问题。在 Volume0 的第一行中,垂直线之前有 space,因此 space 和垂直线都是分隔符,但在下一行中,您没有 space,因此需要错误的列。 接下来试试:

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