逐行使用文件内容并执行

逐行使用文件内容并执行

文件.txt

servername1:DBNAME1:/u01/app
servername2:DBNAME2:/u01/dbs
servername3:DBNAME3:/u01/app1

我想逐行使用上面的文件内容并在shell脚本中执行它

command1 hostname=servername1 db=dbanme1 location=/u01/app 
command2 hostname=servername1 db=dbanme1 location=/u01/app

在上述命令之后,它必须获取第二行值并执行

答案1

while IFS=':' read -r hostname db location
do
    set -- hostname="$hostname" db="$db" location="$location"
    command1 "$@"
    command2 "$@"
done <file.txt

或者,如果您需要保留位置参数,

while IFS=':' read -r hostname db location
do
    command1 hostname="$hostname" db="$db" location="$location"
    command2 hostname="$hostname" db="$db" location="$location"
done <file.txt

这两者都将file.txt逐行读取,并为每一行将三个:分隔字段读取到三个变量hostnamedb和 中location。如果任何行上有更多:- 分隔字段,这些字段将添加到 的值中location

然后执行命令。

答案2

使用gnu并行:

$ parallel --colsep ":" 'command1 hostname={1} db={2} location={3}; command2 hostname={1} db={2} location={3}' :::: file.txt 

file.txt对于命令中的每一行都会执行。这些行被 分割:,因此{1}, {2},{3}被列中的值替换。

请注意,并行parallel启动进程。默认情况下,并行运行的作业数是核心数。您可以指定允许并行运行多少个作业-j。如果需要按照执行行的顺序保留输出,请使用该-k参数。

相关内容