2013-02-19 92 views
2

我对bash脚本编程有点新,并且无法找到我即将提出的问题的答案,也就是说,如果可能的话。Bash - 使用文本文件中的行运行命令

我有一个是通过用grep包含“名称”的文件搜索目录中创建并输出下面的文本文件,说该文件被称为PathOutput.txt

的/ mnt/volnfs3rvdata/4007dc45- 477A-45b2-9c28-43bc5bbb4f9f /主/ VMS/4c3483af-b41a-4979-98b7-6f6a4f147670/4c3483af-b41a-4979-98b7-6f6a4f147670.ovf

的/ mnt/volnfs3rvdata/4007dc45-477a-45b2-9c28- 43bc5bbb4f9f/master/vms/5b5538a5-423f-4eaf-9678-d377a6706c58/5b5538a5-423f-4eaf-9678-d377a6706c58.ovf

/mnt/vo lnfs3rvdata/4007dc45-477a-45b2-9c28-43bc5bbb4f9f /主/ VMS/0e2d1451-45cc-456e-846D-d174515a60dd/0e2d1451-45cc-456e-846D-d174515a60dd.ovf

的/ mnt/volnfs3rvdata/4007dc45-477a- 45b2-9c28-43bc5bbb4f9f /主/ VMS/daaf622e-e035-4c1b-a6d7-8ee209c4ded6/daaf622e-e035-4c1b-a6d7-8ee209c4ded6.ovf

的/ mnt/volnfs3rvdata/4007dc45-477a-45b2-9c28-43bc5bbb4f9f /主/ VMS/48f52ab9-64df,为4B1E-9c35-c024ae2a64c4/48f52ab9-64df,为4B1E-9c35-c024ae2a64c4.ovf

现在我想,做,如果可能的是通过循环使用命令文件使用的是什么一个变量来引入文本文件中的每一行。但我无法找到一种方法来再次运行命令每行。随着我所有的玩法,我都得到了一个结果,它会在第一行中运行一次,但是这是grep的输出被传送到另一个命令的时候。

目前,在一个bash脚本中,我只是提取PathOutput.txt的路径,cat来显示路径,然后将我想要的路径复制到一个读取-p命令来创建一个变量来运行一个命令。它现在工作正常,只需要为每个路径每次运行脚本。如果我能得到命令来循环每一行,我可以输出结果到一个txt文件。

可能吗?

回答

4

你可以使用xargs

$ xargs -n1 echo "arg:" < file 
arg: /mnt/volnfs3rvdata/4007dc45-477a-45b2-9c28-43bc5bbb4f9f/master/vms/4c3483af-b41a-4979-98b7-6f6a4f147670/4c3483af-b41a-4979-98b7-6f6a4f147670.ovf 
arg: /mnt/volnfs3rvdata/4007dc45-477a-45b2-9c28-43bc5bbb4f9f/master/vms/5b5538a5-423f-4eaf-9678-d377a6706c58/5b5538a5-423f-4eaf-9678-d377a6706c58.ovf 
arg: /mnt/volnfs3rvdata/4007dc45-477a-45b2-9c28-43bc5bbb4f9f/master/vms/0e2d1451-45cc-456e-846d-d174515a60dd/0e2d1451-45cc-456e-846d-d174515a60dd.ovf 
arg: /mnt/volnfs3rvdata/4007dc45-477a-45b2-9c28-43bc5bbb4f9f/master/vms/daaf622e-e035-4c1b-a6d7-8ee209c4ded6/daaf622e-e035-4c1b-a6d7-8ee209c4ded6.ovf 
arg: /mnt/volnfs3rvdata/4007dc45-477a-45b2-9c28-43bc5bbb4f9f/master/vms/48f52ab9-64df-4b1e-9c35-c024ae2a64c4/48f52ab9-64df-4b1e-9c35-c024ae2a64c4.ovf 

只是你真的想使用命令替换echo "arg:"。如果您想一次通过所有文件,请删除-n1选项。

+1

谢谢你已经为我所需要的工作。刚刚进入commad xargs -n1 awk'BEGIN [FS =“Name>”; RS“/”] {print $ 2}' Outputofawk.txt只需要清理结果,所有应该加工。谢谢 – user2086572 2013-02-19 14:03:52

2

如果我理解正确的话,你可能会想是这样的:

for L in `cat PathOutput.txt`; do 
    echo "I read line $L from PathOutput.txt" 
    # do something useful with $L 
done 
+5

我认为最好使用' 244an 2013-02-19 12:57:16

+1

只需稍作调整即可完成此工作,目前我将坚持使用xargs作为其一行。感谢这个工作的建议。我会给你一个投票,但我的代表不够高!!!!!! CAT = $(猫VMHEX_F.txt) 线路在$ CAT 做 \t的awk 'BEGIN {FS = “名称>”; RS = “/”} {打印$ 2}' $行> Ifthisworks.txt DONE – user2086572 2013-02-19 14:13:40