2013-02-19 3 views
2

저는 bash 스크립팅에 약간 익숙하며, 제가 요청하려고하는 것에 대한 답변을 찾지 못했습니다. 가능한 경우 가능합니다.Bash - 명령을 텍스트 파일의 행을 사용하여 실행하십시오.

내가 파일을 PathOutput.txt

라고 말, "이름"을 포함하는 파일에 대한 GREP을 사용하여 디렉토리를 검색에 의해 만들어지고 아래에 출력되는 텍스트 파일이

을/mnt/volnfs3rvdata/4007dc45- 477A-45b2-9c28-43bc5bbb4f9f/마스터/가상 머신/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/마스터/가상 머신/0e2d1451-45cc-456e-846d-d174515a60dd/0e2d1451-45cc-456e-846d-d174515a60dd.ovf

/MNT/volnfs3rvdata/4007dc45-477a- 45b2-9c28-43bc5bbb4f9f/마스터/가상 머신/daaf622e-e035-4c1b-a6d7-8ee209c4ded6/daaf622e-e035-4c1b-a6d7-8ee209c4ded6.ovf

/MNT/volnfs3rvdata/4007dc45-477a-45b2-9c28-43bc5bbb4f9f/마스터/VM을/48f52ab9-64df-4b1e-9c35-c024ae2a64c4/48f52ab9-64df-4b1e-9c35-c024ae2a64c4.ovf 나는 가능한 명령을 사용하여 파일을 반복 인 경우 사용 할 싶은 것이 지금

텍스트 파일의 각 행을 가져 오는 변수. 그러나 나는 명령을 다시 실행할 수있는 방법을 찾지 못합니다. 주위를 돌아 다니면서 나는 첫 번째 행에 대해 한 번 실행될 결과를 얻었지만, grep의 출력이 다른 명령으로 파이프되었을 때 결과를 얻었습니다.

지금은 bash 스크립트에서 PathOutput.txt의 경로를 추출하고 cat은 경로를 표시 한 다음 원하는 경로를 복사하여 -p 명령을 실행하여 명령에 대해 실행할 변수를 만듭니다. 이제는 잘 작동하지만 각 경로마다 매번 스크립트를 실행해야합니다. 각 줄마다 반복 명령을 보내면 결과를 txt 파일로 출력 할 수 있습니다.

가능합니까?

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

답변

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:"을 대체 만약 내가 제대로 이해하고

+1

이것이 내가 필요로하는 것에 대해 효과를 보았습니다. 단지 commad에 입력했습니다. xargs -n1 awk 'BEGIN [FS = "Name>"; RS "/"] {print $ 2}' Outputofawk.txt이 결과를 정리하면됩니다. 일. 고맙습니다 – user2086572

2

, 당신은 이런 식으로 뭔가를 할 수 있습니다. 모든 파일을 한 번에 전달하려면 -n1 옵션을 놓으십시오.

+5

'파일 구성'을 사용하는 것이 더 바람직하다고 생각합니다. '읽는 동안 L; ...; done 244an

+1

약간의 조정만으로도이 작업을 수행 할 수 있습니다. 잠시 동안 한 줄로 xargs를 고수 할 것입니다. 이 조언을 주셔서 감사합니다. 나는 당신에게 투표권을 줄 것이다. 그러나 나의 담당자는 충분히 높지 않다! !!!!!! CAT = $ (고양이 VMHEX_F.txt) $ 고양이의 라인에 대한 이 \t AWK을 'BEGIN {FS = "이름>"; RS는 = "/"} {$ 2 인쇄}' 완료 Ifthisworks.txt $ 라인> – user2086572

관련 문제