Ввод из командной строки с неверным результатом - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь прочитать файл, который был выведен в табличном формате. Я могу прочитать файл с описанием тома, snapshotId и списком TimeStarted из области aws. Я прошу пользователя ввести имя тома и вывести snapshotId для введенного тома. Список содержит тома от 0 до тома30.

Проблема в том, что когда пользователь входит в Volume0, он правильно выводит snapshotId, но если пользователь входит в Volume20, он будет выводить только |. Я думаю, потому что исходный файл, который читается в формате таблицы, он делает это. Сначала я хотел поставить условие: если пользователь входит в Volume0, выведите printshotId, а если пользователь входит в Volume20, то напечатайте snapshotid.

Я ищу лучший способ сделать это. Как я могу игнорировать формат таблицы при чтении файла, я должен преобразовать его в текстовый формат? Как? Или как я могу игнорировать любой формат при чтении? Вот мой 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

1 Ответ

1 голос
/ 16 апреля 2020

Проблема в том, что awk не слишком умен и пытается автоматически определить разделитель таблиц. В первом ряду с Volume0 у вас есть пробел перед вертикальной линией, так что это означает, что и пробел, и вертикальная линия являются разделителями, но в следующей строке у вас нет пробела, поэтому он принимает неправильный столбец. Попробуйте следующее:

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