1

我正在寻找一种方法来让它发挥作用:我希望它给出他找到的所有匹配项,如果他没有找到任何东西,而不是空行

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

4

2 回答 2

0

以下将为 fee.file 中的每个输入数字打印 foo.file 中的匹配行。您可能正在尝试做一些更复杂的事情,这在您的帖子中并不清楚;如果是这样,请告诉我。

lines=($(cat fee.file | awk '{print $1}'))

for line in ${lines[@]}; do
    grep $line foo.file;
done; 
于 2013-10-17T20:58:23.850 回答
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

在您的情况下,您可以将 do 循环替换为for number in ${lines[@]}; do ... done.

于 2013-10-17T20:59:46.207 回答