フォルダ内の目的のファイルの最初の列にある数字と数字を比較しようとしています。現在のスクリプトは、ファイルに1行がある場合にのみ機能します。ファイルに複数の行があるたびに失敗します。
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