Home > Back-end >  bash script split array of strings to designed output
bash script split array of strings to designed output

Time:10-01

Data in log file is something like:

"ipHostNumber: 127.0.0.1
ipHostNumber: 127.0.0.2
ipHostNumber: 127.0.0.3"

that's my code snippet:

readarray -t iparray < "$destlog"
unset iparray[0]

for ip in "${iparray[@]}"
do
   IFS=$'\n' read -r -a iparraychanged <<< "${iparray[@]}"
done

And what I wanted to receive is to transfer IP's to another array and then read every line from that array and ping it.

UPDATE: I've acknowledged something, it's probably that I want one array to another but without some string, in this case cut "ipHostNumber: " and have remained only IPs.

Thanks in advance, if there's anything missing please let me know.

CodePudding user response:

Why do you need arrays at all? Just read the input and do the work.

while IFS=' ' read -r _ ip; do
   ping -c1 "$ip"
done < "$destlog"

See https://mywiki.wooledge.org/BashFAQ/001 .

Another way is to use xargs and filtering:

awk '{print $2}' "$destlog" | xargs -P0 -n1 ping -c1

CodePudding user response:

I prefer KamilCuk's xargs solution, but if you just wanted the array because you plan to reuse it -

$: readarray -t ip < <( sed '1d; s/^.* //' file )

Now it's loaded.

$: declare -p ip
declare -a ip=([0]="127.0.0.2" [1]="127.0.0.3")
$: for addr in "${ip[@]}"; do ping -c 1 "$addr"; done
  • Related