Использование AWK для переменной внутри цикла - PullRequest
1 голос
/ 08 апреля 2020

Итак, я получил некоторые URL-адреса от другой команды, и мне нужно идентифицировать определенный шаблон в этом URL-адресе и сохранить значение после шаблона внутри переменной.

Можно ли этого достичь?

**Input file: Just an example**
https://stackoverflow.com/questions/hakuna
https://stackoverflow.com/questions/simba

Для этой цели я написал простое для l oop

for i in `cat inputFile`
do
    storeVal=awk -v $i -F"questions/" '{print$2}'
    echo "The Name for the day is ${storeVal}"
    length=`secondScript.sh ${storeVal}`
    if [[ $length -gt 10 ]]
    then
        thirdScript.sh ${storeVal}
    elif [[ $length -lt 10 ]]
    then
        fourthScript.sh ${storeVal}
    else
        echo "The length of for ${storeVal} is undefined"
done

Желаемый результат:

The Name for the day is hakuna
The length of for hakuna is greater than 10
Command1 hakuna executed
Command2 hakuna executed

The Name for the day is simba
Command1 simba executed
Command2 simba executed

И дополнительный момент, который следует отметить.

Причина, по которой мне нужно хранить значение awk cut в переменной, заключается в том, что мне нужно использовать эту переменную в нескольких местах с l oop.

Ответы [ 2 ]

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

Поскольку звучит так, будто вы хотите выполнить команду для каждой строки во входном файле, вы можете просто использовать встроенную функциональность оболочки:

while IFS=/ read -ra pieces; do
  printf '%s\n' "${pieces[@]}" # prints each piece on a separate line
done < inputFile

Если вы всегда хотите последнюю часть URL (т.е. после последнего /) в каждой строке, то вы можете использовать "${pieces[-1]}":

while IFS=/ read -ra pieces; do
  variable=${pieces[-1]} # do whatever you want with this variable
  printf 'The Name for the day is %s\n' "$variable" # e.g. print it
done < inputFile
0 голосов
/ 08 апреля 2020

Поскольку вы хотите извлечь всю строку после бита questions/, вы можете просто использовать для этого замену шаблона оболочки.

while IFS= read -r line; do
    storeVal=${line##*questions/}
    echo "The Name for the day is ${storeVal}"
done < 'inputFile'

Пример входного файла:

$ cat inputFile
https://stackoverflow.com/questions/hakuna
https://stackoverflow.com/questions/simba
https://stackoverflow.com/questions/simba/lion

Вывод скрипта:

The Name for the day is hakuna
The Name for the day is simba
The Name for the day is simba/lion
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...