繁体   English   中英

用bash从文本文件中删除行

[英]deleting lines from a text file with 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
awk 'FNR == NR && $3 > 60 {array[$2] = 1; next} {if ($2 in array) next; print}' AA/ff.txt BB/filename

这可行,但是效率不高(这有关系吗?)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM