我有一个要求,我必须遍历文件并针对存在的数据运行命令,我该如何使用shell实现这一目标:
例如:文件列出如下,
DB_XX_X
DB_XX
DB_XXX_XX_XX
DB_XX
每个文件的内容都是另一个字符串列表,如下所示:(任何随机字符串)
TBXX
TBXXX
TBXX_XX
TBX_XX_ABC
我想遍历文件及其内容并运行curl命令。这样我就可以对每个文件的内容进行卷曲
curl -sN --negotiate -u foo:bar 'http://hostname/DB_XX/TBXX/
curl -sN --negotiate -u foo:bar 'http://hostname/DB_XX/TBXX_XX/
curl -sN --negotiate -u foo:bar 'http://hostname/DB_XX/TBXXX/
然后是下一个文件
curl -sN --negotiate -u foo:bar 'http://hostname/DB_XX_X/TBX_XX_ABC/
curl -sN --negotiate -u foo:bar 'http://hostname/DB_XX_X/TBXXXXX/
curl -sN --negotiate -u foo:bar 'http://hostname/DB_XX_X/TBX/
curl -sN --negotiate -u foo:bar 'http://hostname/DB_XX_X/TB/
以此类推。
答案 0 :(得分:1)
使用awk,您可以从这些文件构建URL:
awk '{print "http://hostname/"FILENAME"/"$0}' DB*
示例:
~$ cat DB_1
TB_A
TB_B
TB_C
TB_D
~$ cat DB_2
TB_A
TB_B
TB_C
~$ awk '{print "http://hostname/"FILENAME"/"$0}' DB*
http://hostname/DB_1/TB_A
http://hostname/DB_1/TB_B
http://hostname/DB_1/TB_C
http://hostname/DB_1/TB_D
http://hostname/DB_2/TB_A
http://hostname/DB_2/TB_B
http://hostname/DB_2/TB_C
然后您可以使用xargs
捕获该标准输出并将其传递到curl
命令中:
awk '{print "http://hostname/"FILENAME"/"$0}' DB* | xargs -I % curl -sN --negotiate -u foo:bar %
答案 1 :(得分:1)
保持简单并坚持使用bash内置功能,它看起来像:
for file in *; do
while IFS= read -r line; do
curl -sN --negotiate -u foo:bar "http://hostname/$file/$line" </dev/null
done <"$file"
done