Вы имеете в виду, как выполнить команду в фоновом режиме?
Вы можете сделать это, завершив такую команду с помощью "&"
Пример:
$ nemo &
awk -v RS= -F '\n' '
{for (i = 1; i <= NF; i++) a[NR,i] = $i}
NF > max {max = NF}
NR == 3 {exit}
END{
for (i = 1; i <= max; i++)
printf "ADD %s in %s to get %s\n", a[1,i], a[2,i], a[3,i]
}' < input
При RS =
это режим абзаца , где записи являются абзацами. perl
имеет аналогичную функцию с параметром -00
(не путать с -0
). Мы используем новую строку в качестве разделителя полей, поэтому каждое поле представляет собой строку этого абзаца. Вы можете опустить -F '\ n'
, если вы предпочитаете, чтобы поля содержали каждое слово этих абзацев.
Если вы хотите, чтобы строки генерировались оболочкой, расширяющей ADD $ a в $ b, чтобы получить $ c
, тогда вы все равно могли бы awk
поместить их в более полезный заказ и последующая обработка с помощью оболочки:
< input awk -v RS= -F '\n' '
{for (i = 1; i <= NF; i++) a[NR,i] = $i}
NF > max {max = NF}
NR == 3 {exit}
END{
for (i = 1; i <= max; i++) for (j = 1; j <= NR; j++)
print a[j,i]
}' |
while
IFS= read -r a &&
IFS= read -r b &&
IFS= read -r c
do
printf '%s\n' "ADD $a in $b to get $c"
done
Ok теперь мы можем идти за ответом:
# first create a file where the groups are delimited by one empty line
sed '/^$/ { N; s/^\n$//; }' < input_file > temp_file_1
# split the file into three files one for $a, one for $b and one for $c
sed -n '0,/^$/p' temp_file_1 | sed '$d' > a_values
sed -n '/^$/,/^$/p' temp_file_1 | sed '1d;$d' > b_values
sed '1,/^$/d' temp_file_1 | sed '1,/^$/d' > c_values
# paste the three files together and read them into the variables $a, $b, $c line by line
paste a_values b_values c_values | while read a b c; do
echo "ADD $a in $b to get $c"
done