prosource

각 루프에 대한 Bash

probook 2023. 5. 23. 21:59
반응형

각 루프에 대한 Bash

제가 입력한 것이 있습니다.각 줄에는 파일 이름이 있습니다.이 파일을 읽고 각 파일의 내용을 표시하려면 어떻게 해야 합니까?

다음과 같은 작업을 수행할 수 있습니다.

xargs cat <filenames.txt

xargs프로그램은 표준 입력을 읽고, 각 입력 라인에 대해 실행합니다.cat입력 라인을 인수로 사용하는 프로그램입니다.

루프에서 이 작업을 수행하려면 다음 작업을 수행할 수 있습니다.

for fn in `cat filenames.txt`; do
    echo "the next file is $fn"
    cat $fn
done

"forach"는 bash의 이름이 아닙니다.그것은 단순히 "용"입니다.다음과 같은 작업을 한 줄로만 수행할 수 있습니다.

for fn in `cat filenames.txt`; do cat "$fn"; done

참조: http://www.cyberciti.biz/faq/linux-unix-bash-for-loop-one-line-command/

여기 있습니다.while루프:

while read filename
do
    echo "Printing: $filename"
    cat "$filename"
done < filenames.txt
xargs --arg-file inputfile cat

그러면 파일 이름과 파일 내용이 출력됩니다.

xargs --arg-file inputfile -I % sh -c "echo %; cat %"

파일 이름의 공백은 혐오스럽지만 처리하고 싶을 것입니다. :-)

그래서 처음에는 다음과 같은 것을 선택했습니다.

pax> cat qq.in
normalfile.txt
file with spaces.doc

pax> sed 's/ /\\ /g' qq.in | xargs -n 1 cat
<<contents of 'normalfile.txt'>>
<<contents of 'file with spaces.doc'>>

pax> _

모든 확장자가 동일한 경우(예: .jpg) 다음을 사용할 수 있습니다.

for picture in  *.jpg ; do
    echo "the next file is $picture"
done

(이 솔루션은 파일 이름에 공백이 있는 경우에도 작동합니다.)

cat `cat filenames.txt`

성공할 것입니다

언급URL : https://stackoverflow.com/questions/4162821/bash-foreach-loop

반응형