删除变量中grep生成的空行?

时间:2013-10-17 19:08:03

标签: bash variables grep lines string

我正在寻找一种让它工作的方法: 如果他找不到任何东西,我希望它能给出他找到的所有比赛,而不是空行

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中的数字匹配

2 个答案:

答案 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.filefoo.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循环。