Re: Off Topic bash question

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



On 23/07/2020 15:46, Jerry Geis wrote:

Hi Jerry,

You can do even better:

index=0
total=0
names=()
ip=()

IFS=,

while read -r NODENAME IP
do
  names[$index]="$NODENAME"
  ip[$((index++))]="$IP"
  ((total++))
done < list.txt

In this example, you set the input field separator (IFS) to the comma, so that the shell does the word splitting for you, and then allow the "read" call to assign to both variables in a single call. Now you don't need any "cut" calls. In fact, this example avoids forks completely, by just using native features of bash.

For small inputs, it doesn't matter, but if you were processing a large file, and your script was forking for each call to "cut" and creating a new process, you would incur a horrible amount of overhead for no reason.

Regards,
Anand

I have a simple script:
#!/bin/bash
#
index=0
total=0
names=()
ip=()
while read -r LINE
do
NODENAME=`   echo $LINE | cut -f 1 -d ','`
IP=`         echo $LINE | cut -f 2 -d ','`
names[index]="$NODENAME"
ip[index]="$IP"
index=`expr index+1`
total=`expr total+1`
done <<< $(cat list.txt)

simple file:
more list.txt
name1,ip1
name2,ip2
name3,ip3

output when running:
  sh -x ./test_bash.sh
+ index=0
+ total=0
+ names=()
+ ip=()
++ cat list.txt
+ read -r LINE
++ echo name1,ip1 name2,ip2 name3,ip3
++ cut -f 1 -d ,
+ NODENAME=name1
++ echo name1,ip1 name2,ip2 name3,ip3
++ cut -f 2 -d ,
+ IP='ip1 name2'
+ names[index]=name1
+ ip[index]='ip1 name2'
++ expr index+1
+ index=index+1
++ expr total+1
+ total=total+1
+ read -r LINE
+ echo name1
name1


Question is why is it not reading one line at a time ?
All I get is the first one.
I'm just trying to build the array of the items in the file and then list
them at this point.

Thanks

Jerry
_______________________________________________
CentOS mailing list
CentOS@xxxxxxxxxx
https://lists.centos.org/mailman/listinfo/centos

_______________________________________________
CentOS mailing list
CentOS@xxxxxxxxxx
https://lists.centos.org/mailman/listinfo/centos



[Index of Archives]     [CentOS]     [CentOS Announce]     [CentOS Development]     [CentOS ARM Devel]     [CentOS Docs]     [CentOS Virtualization]     [Carrier Grade Linux]     [Linux Media]     [Asterisk]     [DCCP]     [Netdev]     [Xorg]     [Linux USB]


  Powered by Linux