使用bash从文本文件中删除行

时间:2012-05-09 13:11:27

标签: linux bash

我有两组文本文件。第一组是在AA文件夹中。第二组是在BB文件夹中。第一组(AA文件夹)中ff.txt文件的内容如下所示。

Name        number     marks
john            1         60
maria           2         54
samuel          3         62
ben             4         63

如果标记> 60,我想从此文件中打印第二列(数字)。输出将是3,4。接下来,读取BB文件夹中的ff.txt文件并删除包含数字3,4的行。我怎么能用bash做到这一点?

BB文件夹中的

文件如下所示。第二列是数字。

   marks       1      11.824  24.015  41.220  1.00 13.65 
   marks       1      13.058  24.521  40.718  1.00 11.82
   marks       3      12.120  13.472  46.317  1.00 10.62 
   marks       4      10.343  24.731  47.771  1.00  8.18

2 个答案:

答案 0 :(得分:1)

awk 'FNR == NR && $3 > 60 {array[$2] = 1; next} {if ($2 in array) next; print}' AA/ff.txt BB/filename

答案 1 :(得分:0)

这有效,但效率不高(那是关键吗?)

gawk 'BEGIN {getline} $3>60{print $2}' AA/ff.txt | while read number; do gawk -v number=$number '$2 != number' BB/ff.txt > /tmp/ff.txt; mv /tmp/ff.txt BB/ff.txt; done

当然,第二个awk可以用sed -i

替换

对于多个文件:

ls -1 AA/*.txt | while read file
do
    bn=`basename $file`
    gawk 'BEGIN {getline} $3>60{print $2}' AA/$bn | while read number
    do
        gawk -v number=$number '$2 != number' BB/$bn > /tmp/$bn
        mv /tmp/$bn BB/$bn
    done
done

我没有测试过,所以如果有问题,请发表评论。