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

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

Например: Входной файл похож ниже:

100  Thomas  Manager    Sales       $5,000
200  Jason   Developer  Technology  $5,500
300  Sanjay  Sysadmin   Technology  $7,000
400  Nisha   Manager    Marketing   $9,500
500  Randy   DBA        Technology  $6,000

При чтении этого через мой сценарий оболочки я определю 5 переменных, позвольте нам a, b, c, d, e.

Первое повторение:

Значения переменных должны быть присвоены с первой строкой входного файла.

a=100
b=Thomas
c=Manager
d=Sales
e=$5000

Второе повторение:

Значения переменных должны быть присвоены со второй строкой входного файла.

a=200
b=Jason
c=Developer
d=Technology
e=$5500

И так далее...

Любой дает некоторый вход о том, как записать сценарий для чтения значений в этом формате.

2
задан 5 December 2018 в 10:47

1 ответ

Можно использовать read встроенная команда с опцией -a с циклом для чтения каждой строки файла как массив. Затем можно присвоить значение элементов массива к переменным, в которых Вы нуждаетесь (или можно использовать элементы массива непосредственно в сценарии):

#!/bin/bash

IN_FILE='./in-file.txt'

while read -ra LINE
do
        a="${LINE[0]}"; b="${LINE[1]}"; c="${LINE[2]}"
        d="${LINE[3]}"; e="${LINE[4]}"

        echo -e "$a\n$b\n$c\n$d\n$e\n"

done < "$IN_FILE"

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

#!/bin/bash

IN_FILE='./in-file.txt'

args_feed() {
        read -r a b c d e <<< "$(sed "$1 q;d" "$IN_FILE")"
}

# -----------------
# Examples of usage
# -----------------

# Parse the third line
args_feed 3
echo -e "$a\n$b\n$c\n$d\n$e\n"


# Sequential call - First iteration
args_feed $((++LINE_NR))
echo -e "$a\n$b\n$c\n$d\n$e\n"

# Sequential call - Second iteration
args_feed $((++LINE_NR))
echo -e "$a\n$b\n$c\n$d\n$e\n"


# Parse the entire file
NR_LINES="$(cat "$IN_FILE" | wc -l)"
for LINE_NR in $(seq 1 $NR_LINES)
do
        args_feed "$LINE_NR"
        echo -e "$a\n$b\n$c\n$d\n$e\n"
done

Примечания:

3
ответ дан 2 December 2019 в 02:41

Другие вопросы по тегам:

Похожие вопросы: