Saya memiliki file yang berisi satu baris di bawah ini:
{machineA=[0, 1024, 4, 1028], machineB=[1, 1025, 5, 1029]}
di mana saya memiliki dua set data:
machineA=[0, 1024, 4, 1028]
machineB=[1, 1025, 5, 1029]
Sekarang, saya perlu membaca file di atas dan membaginya sedemikian rupa sehingga saya dapat mengekstraksi informasi setiap mesin seperti yang disebutkan di atas dan menyimpannya dalam beberapa struktur data.
Saat ini, saya bingung struktur data mana yang harus saya gunakan dalam skrip bash shell. Jika saya melakukan ini di Jawa, saya akan menggunakan Map<String, Set<String>>
tetapi saya tidak yakin apa yang harus saya gunakan dalam skrip shell.
Dan setelah menyimpannya dalam beberapa struktur data, saya perlu mengulanginya dan mencetak hasilnya.
Saya dapat membaca file di atas menggunakan skrip shell di bawah ini:
#!/bin/bash
while read -r line; do
echo "$line"
done < data.txt
Tetapi saya tidak yakin bagaimana cara membagi data garis di atas sedemikian rupa sehingga saya dapat mengekstraksi setiap informasi mesin dan kemudian menyimpannya dalam beberapa struktur data?
MEMPERBARUI:-
Di bawah ini adalah skrip shell yang saya dapatkan setelah mengikuti saran yang diberikan oleh glenn -
#!/bin/bash
while read -r line; do
echo "$line"
declare -A "$(
echo "x=("
grep -oP '(\w+)(?==)|(?<==\[).*?(?=\])' <<< "$line" |
tr -d , |
paste - - |
sed 's/^/[/; s/\t/]="/; s/$/"/'
echo ")"
)"
for key in "${!x[@]}"; do # need quotes here
for element in ${x[$key]}; do # no quotes here
printf "%s\t%s\n" "$key" "$element"
done
done
done < primary.txt
eval
, di sana.Utilitas pemrosesan teks shell terutama dirancang untuk memanipulasi data yang diwakili dengan satu catatan per baris dan bidang yang dipisahkan oleh spasi putih, atau karakter tetap. Format ini sangat berbeda dan Anda tidak akan dapat memprosesnya secara langsung.
Salah satu pendekatan adalah preproses file agar sesuai dengan jenis format yang dapat diproses dengan mudah. Saya berasumsi bahwa tanda kurung dan kurung kurawal tidak digunakan dengan cara apa pun selain yang digambarkan di sini (tanda kurung di seluruh teks, tanda kurung di sekitar daftar nilai mesin).
Hasilnya memiliki satu mesin per baris dan koma untuk memisahkan catatan. Cuplikan berikut mem-parsing nama mesin pada setiap baris dan meninggalkan daftar nilai yang dipisahkan koma
values
.Cuplikan khusus bash berikut menempatkan nilai dalam array.
sumber
Anda bisa menggunakannya
awk
untuk menyelesaikan tugas.sumber
Ini terlihat seperti JSON. Anda bisa memperbaikinya menjadi JSON yang tepat dan menggunakan alat JSON:
sumber