我正在寻找一种让它工作的方法: 如果他找不到任何东西,我希望它能给出他找到的所有比赛,而不是空行
lines=($(cat fee.file | awk '{print $1}'))
for line in ${lines[@]}; do
dropper="$(cat foo.file | grep ${checkvar[$nr]})"
((nr++))
done
echo $dropper
它给了我:
4594
4044
4950
4503
现在我只想在有号码的时候做一个动作,而我想在空的时候什么都不做。 所以我在for循环中添加了这个
if ! [[ -z $dropper ]]; then
echo $dropper
fi
但这不起作用。它仍然在我的屏幕上打印空行! 不知何故,即使grep找不到东西,它也可以填充$ droppers。我甚至尝试用sed,grep或awk去除白线......但没有任何帮助。
如何在实际填充$ droppers时激活if语句?
foo.file只填充了许多只有数字的行..比如:
4594
4595
4597
2489
3949
fee.file将具有相同的数字,但大约10%的数字与foo.file中的数字匹配
答案 0 :(得分:0)
以下内容将打印foo.file中匹配的行,用于fee.file中的每个输入编号。你可能正试图做一些更复杂的事情,这在你的帖子中并不清楚;如果是这样,请告诉我。
lines=($(cat fee.file | awk '{print $1}'))
for line in ${lines[@]}; do
grep $line foo.file;
done;
答案 1 :(得分:0)
怎么样:
#!/bin/bash
while read number remainder
do
dropper="$(grep -w $number foo.file)"
if [ $? -eq 0 ]; then
echo "$dropper found"
else
echo "$number not found"
fi
done < "fee.file"
如果填充fee.file
和foo.file
填充
for i in $(seq 1 100 1001); do echo $i some other stuff >> fee.file; done
for i in $(seq 1 1000); do echo $i >> foo.file; done
我的输出是:
1 found
101 found
201 found
301 found
401 found
501 found
601 found
701 found
801 found
901 found
1001 not found
在您的情况下,您可以用for number in ${lines[@]}; do ... done
替换do循环。