![使用循环从文件中提取信息](https://linux22.com/image/1142247/%E4%BD%BF%E7%94%A8%E5%BE%AA%E7%8E%AF%E4%BB%8E%E6%96%87%E4%BB%B6%E4%B8%AD%E6%8F%90%E5%8F%96%E4%BF%A1%E6%81%AF.png)
我需要帮助:)我有一个这样的文件:
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"
我们可以使用xargs
with-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
在输入文件示例中包含的空白行上运行脚本。