我有两组文本文件。第一组是在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
答案 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
我没有测试过,所以如果有问题,请发表评论。