blazzeq
blazzeq

Reputation: 1

bash script split array of strings to designed output

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.

Upvotes: 0

Views: 53

Answers (2)

Paul Hodges
Paul Hodges

Reputation: 15438

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

Upvotes: 0

KamilCuk
KamilCuk

Reputation: 142005

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

Upvotes: 1

Related Questions