Bash при чтении проблемы ввода - PullRequest
1 голос
/ 24 января 2020

Возможный способ использования во время чтения:

while read server application date; do ..

Так что теперь я могу печатать только приложения, я понимаю это. Итак, вот мой вопрос: на моем примере я точно знаю, сколько существует «массивов», но как бы я это сделал, если бы не знал, сколько «массивов» существует в строке? Файл примера:

Server : ID1 ; ID2 ; ID3
Server : ID1
Server : ID1 ; ID2
Server : ID1 ; ID2 ; ID3 ; ID4

Не обязательно с чтением, но как я могу их прочитать, чтобы я мог, например,

echo "$Server $ID3"

ps извините за плохое engli sh

так что я сейчас делаю так:

#!/bin/bash

file=$1
csv=$2

echo Server : Applikation : AO : BV : SO > endlist.txt
while read server aid; do
grep $aid $csv | while IFS=";" read id aid2 name alia status typ beschreibung gesch gesch2 finanzierung internet service servicemodell AO BV SO it betrieb hersteller; do
if [[ $aid == $aid2 ]]
then
echo $server : $name : $AO : $BV : $SO >> endlist.txt
fi
done
done < $file

Проблема в том, что первое время чтения пока только SERVER и AID, но я хочу отредактировать это файл, так что возможно более одного AID

1 Ответ

2 голосов
/ 24 января 2020

Не обязательно с чтением, но как я могу их прочитать, чтобы я мог, например,

echo "$Server $ID3"

Сначала разделить входные данные на :, а затем прочитать массив на ;. Используйте bash массивы и read -a для сохранения ввода в массив.

# split the input on `:` and spaces
while IFS=' :' read -r server temp_ids; do
     # split the ids on `;` and spaces into an array
     IFS=' ;' read -r -a id <<<"$temp_ids"

     # check if there are at least 3 elements
     if ((${#id[@]} >= 3)); then
         # array numbering starts from 0
         echo "$server ${id[2]}"
     else
         echo There is no 3rd element...
     fi

done <<EOF
Server : ID1 ; ID2 ; ID3
Server : ID1
Server : ID1 ; ID2
Server : ID1 ; ID2 ; ID3 ; ID4
EOF

выведет:

Server ID3
There is no 3rd element...
There is no 3rd element...
Server ID3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...