Извлечь информацию из файла с помощью цикла
Мне нужна помощь:) У меня есть такой файл:
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
от запуска скрипта на пустых строках, которые содержатся в вашем примере входного файла.