Извлечь информацию из файла с помощью цикла

Мне нужна помощь:) У меня есть такой файл:

AA BC FG

RF TT GH

DD FF HH

(несколько строк и три столбца), и я хочу, чтобы шаг за шагом помещать буквы каждого столбца в переменную, чтобы передать их в качестве входных данных в другой скрипт. Поэтому я хотел бы получить:

для петли 1°:

var1 = AA
var2 = BC
var3 = FG

для петли 2°:

var1 = RF
var2 = TT
var3 = GH

для петли 3°:

var1 = DD
var2 = FF
var3 = HH

2 ответа

Если в вашем файле ровно 3 элемента, разделенных пробелами, в каждой строке (например, без пустых строк), вы сможете использовать простой while ... read цикл:

while read -r var1 var2 var3; do
  ./otherscript "$var1" "$var2" "$var3"
done < "file"

Если есть пустые строки, то вам, вероятно, следует прочитать полные строки и анализировать только непустые, например

while IFS= read -r line; do
  if [[ -n "$line" ]]; then 
    read -r var1 var2 var3 <<< "$line"
    ./otherscript "$var1" "$var2" "$var3"
  fi
done < "file"

Учитывая, что ваш входной файл предоставляет только аргументы для скрипта, xargs разумный выбор в этой ситуации. Давайте возьмем этот скрипт в качестве примера:

#!/bin/bash
echo "This is a test"
echo "var1 is $1 " "var 2 is $2 " "var 3 is $3"

Мы можем использовать xargs с -L1 для принятия 1 строки в файле в качестве аргументов, и --arg-file указать файл, содержащий эти аргументы. Таким образом:

$ xargs -L 1 -r --arg-file=input.txt ./somescript.sh 
This is a test
var1 is AA  var 2 is BC  var 3 is FG
This is a test
var1 is RF  var 2 is TT  var 3 is GH
This is a test
var1 is DD  var 2 is FF  var 3 is HH

Обратите внимание на -r опция, которая мешает xargs от запуска скрипта на пустых строках, которые содержатся в вашем примере входного файла.

Другие вопросы по тегам