Разбор текста с разделителями в массивах оболочки - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу проанализировать текстовый файл с разделителями и назначить его массиву.

Пример текстового файла выглядит следующим образом:

create_tetro.c:132://   printf("\t\t\tSol %d found !\n", sol);
float_to_int.c:23://    printf("%f -> %d\n", i, ((int)i / 1) + 0.9999);
free_all.c:19:  printf("update_pieces\n");

Все .gres * .txt - это одни и те же файлы, но я не нашел способа сделать это только за один цикл.Тем не менее, когда я пытаюсь echo ${array[2]}, он просто показывает пустым.Придумали это до сих пор:

#!/bin/bash

IFS='\n'
i=0

typeset -a file
typeset -a line_nb=()
typeset -a string=()

while read line; do
{
file[i]="$(cut -d ':' -f1)"
((i++))
}
done < .gres.txt

while read line; do
line_nb[$i]="$(cut -d ':' -f2)";
let i=i+1;
done < .gres2.txt

while read line; do
string[i]="$(cut -d ':' -f3)"
let "i++"
done < .gres3.txt

1 Ответ

0 голосов
/ 21 декабря 2018

Не совсем уверен в том, что вам нужно, но прямо сейчас cut не будет делать много, и каждый массив начинается с индекса после другого.Вы могли бы иметь лучший результат с чем-то вроде этого:

    #!/bin/bash

    i=0

    while read line; do
    {
    file[$i]="$(cut -d ':' -f1 <<< $line)"
    line_nb[$i]="$(cut -d ':' -f2 <<< $line)"
    string[$i]="$(cut -d ':' -f3 <<< $line)"
    ((i++))
    }
    done < ./gres.txt

Надеюсь, что это может помочь

...