2

我有两组文本文件。第一套在 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
4

2 回答 2

1
awk 'FNR == NR && $3 > 60 {array[$2] = 1; next} {if ($2 in array) next; print}' AA/ff.txt BB/filename
于 2012-05-09T13:51:08.157 回答
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

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

于 2012-05-09T13:47:34.967 回答