Bash - 在迭代变量时循环命令?
Bash - Loop a command while iterating variables?
我是 BASH 的新手,我有点迷茫。我也不确定我的特定问题之前是否已得到解决(如果有,我们深表歉意)。
我有一个包含 3 列的 table 的 csv 文件。我想要 运行 一个将重复某个命令的循环,并在它完成后,重新 运行 我的命令并插入 table 我的变量从中提取的下一个值。我希望重复此过程,直到从 table 的每一列中提取每个值(我的命令一次提取三个)。
这是我目前的情况:
file=$(cat /path/my_ids.csv | awk -v FS=',' '{ print }'| head -1 | tail -n 1 )
id1=$(cat /path/my_ids.csv | awk -v FS=',' '{ print }'| head -1 | tail -n 2 )
id2=$(cat /path/my_ids.csv | awk -v FS=',' '{ print }'| head -1 | tail -n 3 )
这些是我用来调用 table (my_ids.csv) 中各自列的值的变量。我的命令需要在每次 运行 循环时同时从三个不同的列中提取三个值。一旦循环准备就绪,我的命令应该看起来像这样 - 我对原始命令所做的就是包括星号之间的内容:
command -base **$file** -tp **$id1** -tp **$id2** -all
(来自特定程序的命令 运行s 将创建一个新目录(文件),同时平均其他两个 id 目录。这就是为什么我需要一个循环 运行s 通过每次循环时每个变量列中的下一个值。)
如何让 bash 重复该命令并在每次循环出现时向下移动三列值?
感谢您的帮助和耐心等待!
您逐行逐字段读取文件并执行命令。
{
# ignore first line
IFS= read -r _
# read each line and split on ,
while IFS=, read -r file id1 id2; do
# execute the command
command -base "$file" -tp "$id1" -tp "$id2" -all
done
} < my_ids.csv
阅读https://mywiki.wooledge.org/BashFAQ/001 . Check your scripts with https://shellcheck.net。
我是 BASH 的新手,我有点迷茫。我也不确定我的特定问题之前是否已得到解决(如果有,我们深表歉意)。
我有一个包含 3 列的 table 的 csv 文件。我想要 运行 一个将重复某个命令的循环,并在它完成后,重新 运行 我的命令并插入 table 我的变量从中提取的下一个值。我希望重复此过程,直到从 table 的每一列中提取每个值(我的命令一次提取三个)。
这是我目前的情况:
file=$(cat /path/my_ids.csv | awk -v FS=',' '{ print }'| head -1 | tail -n 1 )
id1=$(cat /path/my_ids.csv | awk -v FS=',' '{ print }'| head -1 | tail -n 2 )
id2=$(cat /path/my_ids.csv | awk -v FS=',' '{ print }'| head -1 | tail -n 3 )
这些是我用来调用 table (my_ids.csv) 中各自列的值的变量。我的命令需要在每次 运行 循环时同时从三个不同的列中提取三个值。一旦循环准备就绪,我的命令应该看起来像这样 - 我对原始命令所做的就是包括星号之间的内容:
command -base **$file** -tp **$id1** -tp **$id2** -all
(来自特定程序的命令 运行s 将创建一个新目录(文件),同时平均其他两个 id 目录。这就是为什么我需要一个循环 运行s 通过每次循环时每个变量列中的下一个值。)
如何让 bash 重复该命令并在每次循环出现时向下移动三列值?
感谢您的帮助和耐心等待!
您逐行逐字段读取文件并执行命令。
{
# ignore first line
IFS= read -r _
# read each line and split on ,
while IFS=, read -r file id1 id2; do
# execute the command
command -base "$file" -tp "$id1" -tp "$id2" -all
done
} < my_ids.csv
阅读https://mywiki.wooledge.org/BashFAQ/001 . Check your scripts with https://shellcheck.net。