文件.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
逐行读取,并为每一行将三个:
分隔字段读取到三个变量hostname
、db
和 中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
参数。