这可能是一个愚蠢的问题,但我在脚本编写时从来没有这样的事情。所以任何帮助都会受到赞赏。
我正在处理人口普查的数据并且必须生成报告。 文件中的每一行都有姓氏,频率等。我必须抓住频率。 但如果我抓住一些频率为" 0.000"然后我必须将它改为" 0.00025"。我试图做一个if语句,但我不知道该怎么做。
#!/bin/bash
all=/homes/ddailey/public_html/data/dist_all_last
count=`grep -w $1 $all | awk '{ print $2 }'`
if [ $count == "0.000" ]; then
echo .00025
else
echo $count
fi
答案 0 :(得分:1)
第一个陈述
count=`grep -w $1 $all | awk '{ print $2 }'`
返回由换行符分隔的值的列表。一个简单的echo
不会显示换行符,但会显示:
echo "$count"
然而,if
语句需要单个值,因此如果$count
中有两个或更多结果,则它与单个测试值不匹配。您需要做的是循环$count
中的值。请尝试以下方法:
counts=`grep -w $1 $all | awk '{ print $2 }'`
for count in $counts
do
if [ $count == "0.000" ]; then
echo .00025
else
echo $count
fi
done
我更喜欢以下设计,它将您的所有逻辑放入awk命令中。这样可以将所有处理逻辑保存在一个脚本中,而不是分解为awk和bash。
grep -w $1 $all |
awk '{ if ($2 == "0.000") $2 = "0.00025"; print $2 }'
答案 1 :(得分:0)
选择一个shell。 Bourne Again Shell(bash)和basic / bin / sh都很受欢迎。还有许多其他选项你不应该使用。
具体建议。谷歌。真。请参阅Compare a string in Unix以获取答案,如果使用bash,请How do I compare strings in Bourne Shell?。
观看空间。 Shell编程对空白区域很敏感,因此拥有或忘记空间会破坏脚本。例如,确保记住'['或']'之前和之后的空格。让它运行通常涉及添加和删除空格。
留意空的替代品。 if [ $nosuchvar = 3 ]
发出错误但if [ "$nosuchvar" = 3 ]
没有。此外,全局替换,因此if [[ $foo == "a*" ]]
与if [ $foo == "a*" ]
转储shell。运行Python或其他“真正的”语言通常比五行以上的任何shell脚本更清晰,更易于维护。