строка bash в массив с пробелами и дополнительными разделителями

Я пытаюсь создать массивы из строк, которые имеют вертикальную черту ("|") в качестве разделителей и включать пробелы.Некоторое время я искал и сблизился с такими источниками, как Как мне разделить строку по разделителю в 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:

Есть предложения? Спасибо!!

5
задан jww 25 August 2019 в 21:07
поделиться