Использование индексных массивов bash4.
mapfile -t data < data.txt
mapfile -t age <age.txt
for i in "${!data[@]}"; do echo "${data[$i]//age=/age="${age[$i]}"}"; done
Вывод такой.
height= 6'1" age=21 shoe-size=9.5 sex= M
height= 6'5" age=23 shoe-size=9.0 sex= M
height= 5'11" age=22 shoe-size=8.5 sex= F
height= 5'9" age=19 shoe-size=11.5 sex= M
height= 4'11" age=34 shoe-size=7.5 sex= F
height= 6'4" age=27 shoe-size=9.5 sex= M
mapfile
aka readarray
- это функция bash4 +.
${!data[@]}
означает, что вы ищете индекс массива и ${data[@]}
это массив.
Или используя while loop
и read
read
, так что в основном это просто чтение двух файлов за некоторое время .
height= 6'1" age=21 shoe-size=9.5 sex= M
height= 6'5" age=23 shoe-size=9.0 sex= M
height= 5'11" age=22 shoe-size=8.5 sex= F
height= 5'9" age=19 shoe-size=11.5 sex= M
height= 4'11" age=34 shoe-size=7.5 sex= F
height= 6'4" age=27 shoe-size=9.5 sex= M
POSIX sh решение.
#!/bin/sh
while read -r column1_in_data column2_in_data column3_in_data rest_of_columns_in_data <&3
read -r line_in_age; do
printf '%s\n' "$column1_in_data $column2_in_data $column3_in_data$line_in_age $rest_of_columns_in_data"
done 3<data.txt <age.txt
* <&3
- это перенаправление, поэтому первое чтение будет считываться из FD
(дескриптор файла 3.)
${var//search/rep}
- это bash спецификация c PE (расширение параметра.)
Awk может работать лучше / быстрее на большом наборе файлов / данных, которые я считаю.