使用Shell遍历文件内容

时间:2018-09-24 16:17:15

标签: bash shell

我有一个要求,我必须遍历文件并针对存在的数据运行命令,我该如何使用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/

以此类推。

2 个答案:

答案 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