gpt4 book ai didi

linux - 如果文件为空,将文本写入第一行

转载 作者:太空宇宙 更新时间:2023-11-04 10:49:06 25 4
gpt4 key购买 nike

我需要检查两个文件是否为空。如果是,则将“-999”写入文件,否则对文件中的数字进行平均。

这是我一直尝试使用的编码:

代码:

if [[ ! -z file1 ]] || [[ ! -z file2 ]]
then

echo "-999" > file_avg

else

cat file1 >> tmp
cat file2 tmp > file_all
cat file_all | awk 'BEGIN {c = 0; sum = 0;} $1 ~ /^[0-9]*(\.[0-9]*)?$/
{a[c++] = $1; sum += $1;} END {avg = sum / c; if( (c % 2) == 1 ) {median = a[ int(c/2) ];}
else {median = ( a[c/2] + a[c/2-1] ) / 2;} OFS="\t"; print avg;}' file_all
> file_avg

fi

file_all 的内容:

76
76
78
79
75
76
77
78
76

最佳答案

检查文件是否为空的适当方法是使用 -s 而不是 -z(它检查给定的字符串是否为零)。

顺便说一句,您的代码似乎计算中位数,而您声明要计算平均值,这是不一样的。我已经使用 bash 脚本而不是 awk 重写了您的脚本来计算平均值。

#!/bin/bash                                                                        

nlines=0
total=0

if test -s file1; then
while read value; do
let total=total+value
let nlines=nlines+1
done < file1
fi

if test -s file2; then
while read value; do
let total=total+value
let nlines=nlines+1
done < file2
fi

if test "${nlines}" -eq "0"; then
echo "-999" > file_avg
else
let average=total/nlines
echo $average > file_avg
fi

关于linux - 如果文件为空,将文本写入第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31816131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com