Я пытаюсь создать массивы из строк, которые имеют вертикальную черту ("|") в качестве разделителей и включать пробелы.Некоторое время я искал и сблизился с такими источниками, как Как мне разделить строку по разделителю в Bash? , Разделение строки на массив и еще куча. Я близок, но это не совсем работает. Две основные проблемы заключаются в том, что в строках есть пробелы, есть начальный и конечный разделители, а некоторые поля пусты. Кроме того, вместо того, чтобы просто повторять значения, мне нужно присвоить их переменным. Вот формат исходных данных:
|username|full name|phone1|phone2|date added|servers|comments|
Пример:
|jdoe | John Doe| 555-1212 | |1/1/11 | workstation1, server1 | added by me |
Вот что мне нужно:
Username: jdoe
Fullname: John Doe
Phone1: 555-1212
Phone2:
Date_added: 1/1/11
Servers: workstation1, server1
Comments: guest account
Изменить: я использую sed, чтобы вырезать первый и последний разделитель и пробелы перед и после каждого разделителя, теперь ввод:
jdoe|John Doe|555-1212||1/1/11|workstation1, server1|added by me
Вот что я пробовал:
oIFS="$IFS"; IFS='|'
for line in `cat $userList`; do
arr=("$line")
echo "Username: ${arr[0]}" #not assigning a variable, just testing the output
echo "Full Name: ${arr[1]}"
echo "Phone 1: ${arr[2]}"
echo "Phone 2: ${arr[3]}"
# etc..
done
IFS="$oIFS"
Вывод:
Username:
Full Name:
Phone 1:
Phone 2:
Username: jdoe
Full Name:
Phone 1:
Phone 2:
Username: John Doe
Full Name:
Phone 1:
Phone 2:
Еще кое-что, что я пробовал:
for line in `cat $userList`; do
arr=(${line//|/ })
echo "Username: ${arr[0]}"
echo "Full Name: ${arr[1]}"
echo "Phone 1: ${arr[2]}"
echo "Phone 2: ${arr[3]}"
# etc
done
Вывод:
Username: jdoe
Full Name: John
Phone 1:
Phone 2:
Username: Doe
Full Name: 555-1212
Phone 1:
Phone 2:
Есть предложения? Спасибо!!