주어진 숫자를 Bash 폴더에 있는 원하는 파일의 첫 번째 열에 있는 숫자와 비교하십시오.

주어진 숫자를 Bash 폴더에 있는 원하는 파일의 첫 번째 열에 있는 숫자와 비교하십시오.

폴더에 있는 원하는 파일의 첫 번째 열에 있는 숫자와 숫자를 비교하려고 합니다. 현재 스크립트는 파일에 한 줄이 있는 경우에만 작동합니다. 파일에 두 줄 이상이 있을 때마다 실패합니다.

cat 192.168.1.2_time-final2_timepls
86.6333 /home/fes/nginx/Templates/test.default

cat 192.168.1.3_time-final2_timepls
8 /home/fes/nginx/createfile
122 /home/fes/nginx/Templates/rtPortal.default

cat 192.168.1.4_time-final2_timepls
981 /home/fes/nginx/Templates/test.default

내 코드:

dir1="/home/user1/test/time-final/*_time-final2_timepls"

y=100

for files3 in $dir1; do

        z=$(cat $files3 | awk '{print $1}')

        if awk 'BEGIN{exit ARGV[1]>ARGV[2]}' "$z" "$y"
                then
                  echo "z is smaller than y"
        else
                  echo "z greater than y" "Filepath: "  $files3
        fi


done

실제 출력:

[root@user1]# ./my-script.sh
z smaller than y
z greater than y Filepath:  /home/user1/test/time-final/192.168.1.3_time-final2_timepls
z greater than y Filepath:  /home/user1/test/time-final/192.168.1.4_time-final2_timepls

이 출력을 얻으려고 합니다. z>y 조건이 충족되면 파일의 행도 인쇄됩니다.

z smaller than y 
z smaller than y 
z greater than y Filepath:  /home/user1/test/time-final/192.168.1.3_time-final2_timepls    Filename: /home/fes/nginx/Templates/rtPortal.default 
z greater than y Filepath:  /home/user1/test/time-final/192.168.1.4_time-final2_timepls    Filename: /home/fes/nginx/Templates/test.default

답변1

어쨌든 이전 솔루션에서 답변을 얻었습니다.

y=100

awk '{print $1, $2}' *_time-final2_timepls |
        while read -r num1 path1; do
        z=$num1
        if awk 'BEGIN{exit ARGV[1]>ARGV[2]}' "$z" "$y"
                then
                  echo "z is smaller than y"
        else
                  echo "z greater than y" "Filepath: "  $path1
        fi    
done

산출:

z is smaller than y
z is smaller than y
z greater than y Filepath:  /home/fes/nginx/Templates/rtPortal.default
z greater than y Filepath:  /home/fes/nginx/Templates/test.default

관련 정보