Looping through the content of a file in Bash

后端 未结 13 2366
傲寒
傲寒 2020-11-21 10:08

How do I iterate through each line of a text file with Bash?

With this script:

echo \"Start!\"
for p in (peptides.txt)
do
    echo \"${p}\"
done
         


        
13条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-11-21 10:43

    Here is my real life example how to loop lines of another program output, check for substrings, drop double quotes from variable, use that variable outside of the loop. I guess quite many is asking these questions sooner or later.

    ##Parse FPS from first video stream, drop quotes from fps variable
    ## streams.stream.0.codec_type="video"
    ## streams.stream.0.r_frame_rate="24000/1001"
    ## streams.stream.0.avg_frame_rate="24000/1001"
    FPS=unknown
    while read -r line; do
      if [[ $FPS == "unknown" ]] && [[ $line == *".codec_type=\"video\""* ]]; then
        echo ParseFPS $line
        FPS=parse
      fi
      if [[ $FPS == "parse" ]] && [[ $line == *".r_frame_rate="* ]]; then
        echo ParseFPS $line
        FPS=${line##*=}
        FPS="${FPS%\"}"
        FPS="${FPS#\"}"
      fi
    done <<< "$(ffprobe -v quiet -print_format flat -show_format -show_streams -i "$input")"
    if [ "$FPS" == "unknown" ] || [ "$FPS" == "parse" ]; then 
      echo ParseFPS Unknown frame rate
    fi
    echo Found $FPS
    

    Declare variable outside of the loop, set value and use it outside of loop requires done <<< "$(...)" syntax. Application need to be run within a context of current console. Quotes around the command keeps newlines of output stream.

    Loop match for substrings then reads name=value pair, splits right-side part of last = character, drops first quote, drops last quote, we have a clean value to be used elsewhere.

提交回复
热议问题