Manuel
Manuel

Reputation: 29

Bash while read input issue

An possible way to use while read is:

while read server application date; do ..

So now i could print only the applications, i understand that. So here comes my question: with my example i know exactly how many "arrays" there are but how would i do it if i dont know how many "arrays" exist per line? Example file:

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

It doesnt have to be with read but how could i read them so i could for example

echo "$Server $ID3"

p.s sorry for the bad english

so what i am doing so far is this:

#!/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

the Problem is that the first while read is for now only SERVER and AID but i want to edit this file so more than one AID is possible

Upvotes: 1

Views: 64

Answers (1)

KamilCuk
KamilCuk

Reputation: 140990

It doesnt have to be with read but how could i read them so i could for example

echo "$Server $ID3"

First split the input on :, then read the array on ;. Use bash arrays and read -a to save input to an array.

# 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

will output:

Server ID3
There is no 3rd element...
There is no 3rd element...
Server ID3

Upvotes: 2

Related Questions