Как можно добавить значение массива к началу отдельных строк в текстовом файле - PullRequest
0 голосов
/ 05 ноября 2019

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

Например, если у меня есть массив animals=(cat, dog, bird, lizard) и текстовый файл, который выглядит следующим образом:

.color
.age
.size
.breed
.name

.color
.age
.size

.color
.age
.size
.breed

Как я могу добавить к cat строки 1-5, dog к строкам 6-8, птица на линии 9-13. (у каждого животного разное количество секций)

Выходной текстовый файл должен выглядеть следующим образом:

cat.color
cat.age
cat.size
cat.breed
cat.name

dog.color
dog.age
dog.size

Bird.color
Bird.age
Bird.size
Bird.breed

Любая помощь очень ценится:)

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

Похоже, пустая строка является разделителем, поэтому мы можем использовать это:

a=(cat dog bird lizard)
i=0 ac=${#a[@]}

while IFS= read -r line; do
   [[ $line =~ ^$ ]] && { ((i = (i + 1) % ac)); printf '\n';  continue; }
   printf '%s\n' "${a[i]}$line"
done < file
0 голосов
/ 05 ноября 2019

Как я могу добавить cat к строкам 1-5, а затем dog к строкам 6-…

Мы также можем использовать join, чтобы присоединиться к несуществующему полю:

join --nocheck-order -j2 <(printf %s\\n ${animals[*]}) <(head -5 text)|tr -d ' '
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...