在循环文本行

时间:2016-09-08 20:35:51

标签: bash

所以,假设我有这个数据文件:

apples   asd   45      321     7000
oranges   gl   78      102     850
some    ltd     83      15      500
other   nova    80      50      3500
stuff    600     65      115     450

我想循环遍历每一行,得到最后一个字(这是大数字),这应该是价格。然后检查它是否小于1000,如果是,则将其输出到另一个文件。

这就是我所拥有的:

touch items_cheaper_than_1k.txt
while read LINE
do
        PRICE="$(cut -d. -f3 $LINE)"
        if [$PRICE < 1000]; then
                $LINE >> items_cheaper_than_1k.txt
        fi
done < cars.txt
cat items_cheaper_than_1k.txt

问题是我收到了错误

cut: apples: No such file or directory
cut: asd: No such file or directory
cut: 45: No such file or directory
cut: 321: No such file or directory
cut: 7000: No such file or directory

(并且每行的每个单词依次)。我做错了吗?

在每行错误列表之后,我得到line 5: 1000]: No such file or directory

1 个答案:

答案 0 :(得分:2)

使用awk

awk '$NF<1000' file.txt

$NF是最后一个字段的值,$NF<1000检查该值是否小于1000,如果是,则打印该行。

将输出保存在另一个文件中,例如out.txt

awk '$NF<1000' file.txt >out.txt

示例:

% cat file.txt 
apples   asd   45      321     7000
oranges   gl   78      102     850
some    ltd     83      15      500
other   nova    80      50      3500
stuff    600     65      115     450

% awk '$NF<1000' file.txt
oranges   gl   78      102     850
some    ltd     83      15      500
stuff    600     65      115     450