BASH для сравнения двух полей, интегрирующих информацию из другого файла - PullRequest
0 голосов
/ 27 июня 2018

У меня есть два следующих текстовых файла:

fruits.txt

nectarine      strawberry
orange         peach
grape          apple
mango          watermelon

numbers.txt

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

В fruits.txt я хочу оставить только один из 2 фруктов в строке. Один удаленный должен быть номером с большим соответствующим номером ( c.f. numbers.txt). Вывод будет выглядеть так:

nectarine
peach
grape
mango

Как мне добиться этого в bash?

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Вы можете использовать эту команду awk:

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

nectarine
peach
grape
mango
0 голосов
/ 27 июня 2018

Вы можете использовать петли read и while. Например:

#!/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

даст желаемый результат

...