0

我有以下两个文本文件:

水果.txt

nectarine      strawberry
orange         peach
grape          apple
mango          watermelon

数字.txt

strawberry    57
apple         48
mango         40
peach         44
watermelon    60
nectarine     46
orange        72   
grape         39

在 fruits.txt 我想每行只保留 ​​2 个水果中的一个。删除的应该是对应数字较高的那个( cf numbers.txt)。输出如下所示:

nectarine
peach
grape
mango

我怎样才能在 bash 中实现这一目标?

4

2 回答 2

4

你可以使用这个awk命令:

awk 'FNR == NR {num[$1]=$2; next} {
print (num[$1] < num[$2] ? $1 : $2)}' numbers.txt fruits.txt

nectarine
peach
grape
mango
于 2018-06-27T16:16:03.237 回答
3

您可以使用readwhile循环。例如:

#!/bin/bash

# read numbers.txt into associate array
declare -A a
while read k v; do
    a[$k]=$v
done < numbers.txt

# process the fruits.txt
while read l r; do
    (( a[$l] > a[$r] )) && l=$r
    echo $l
done < fruits.txt

将给出所需的输出

于 2018-06-27T15:29:42.333 回答