Несколько строк ввода для нескольких переменных

Вы имеете в виду, как выполнить команду в фоновом режиме?

Вы можете сделать это, завершив такую ​​команду с помощью "&"

Пример:

$ nemo &
2
18.03.2016, 11:26
2 ответа
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
1
27.01.2020, 22:20

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
0
27.01.2020, 22:20

Теги

Похожие вопросы