【发布时间】:2021-10-22 07:30:52
【问题描述】:
我是 BASH 新手,有点迷茫。我也不确定我的特定问题之前是否已经解决(如果有,请道歉)。
我有一个包含 3 列的表的 csv 文件。我想运行一个循环来重复某个命令,并在完成后重新运行我的命令并从我的变量从中提取的表中插入下一个值。我希望重复此过程,直到从表的每一列中提取每个值(我的命令一次提取三个)。
这是我目前所拥有的:
file=$(cat /path/my_ids.csv | awk -v FS=',' '{ print $1}'| head -1 | tail -n 1 )
id1=$(cat /path/my_ids.csv | awk -v FS=',' '{ print $2}'| head -1 | tail -n 2 )
id2=$(cat /path/my_ids.csv | awk -v FS=',' '{ print $3}'| head -1 | tail -n 3 )
这些是我用来从我的表 (my_ids.csv) 中它们各自的列中调用值的变量。我的命令每次通过循环时都需要一次从三个不同的列中提取三个值。一旦循环准备好,我的命令应该看起来像这样 - 我对原始命令所做的只是包括星号之间的内容:
command -base **$file** -tp **$id1** -tp **$id2** -all
(该命令从一个特定程序运行,该程序将创建一个新目录(文件),同时平均其他两个 id 目录。这就是为什么我需要一个循环,每次循环时都会遍历每个变量列中的下一个值.)
如何让 bash 重复该命令并在每次循环出现时向下移动三列值?
感谢您的帮助和耐心!
【问题讨论】:
-
tail -n 3sooid2最后有 3 行? -
请注意,
cat | awk通常是错误的。而awk | head | tail也是一种反模式。您根本不应该使用awk来解析该行,但如果您想这样做,您可以使用类似file=$(awk 'NR==n{print $1}' n=$N FS=, /path/my_ids.csv)而不是(ab-)使用 cat/head/tail 从第 N 行获取值.