[英]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.