使用循环从文件中提取信息

使用循环从文件中提取信息

我需要帮助:)我有一个这样的文件:

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

答案1

如果您的文件每行恰好有 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"

答案2

考虑到您的输入文件仅为脚本提供参数,xargs在这种情况下是一个合理的选择。让我们以此脚本为例:

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

我们可以使用xargswith-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在输入文件示例中包含的空白行上运行脚本。

相关内容