AWK - сравнение значений двух переменных в двух разных файлах

У меня есть два текстовых файла A.txt и B.txt. Каждая строка A.txt A.txt

100
222
398

B.txt

1  2  103  2 
4  5  1026 74
7  8  209  55
10 11 122  78

Я ищу команду awk для этого:

for each line of A 
    search B;
    if (the value of third column in a line of B - the value of the variable in A > 10)
        print that line of B;
1
задан 28 October 2013 в 00:49

2 ответа

Вот еще один подход:

while read i; do awk -v i="$i" '$3-i>10' file2; done < file1

Объяснение:

  • while read i; do ... ; done < file1: Это перебирает файл один, сохраняя найденное значение ( вся линия) как $i.
  • awk -v i=$i '$3-i>10' file2: он проходит через файл2 и печатает каждую строку, где третье поле меньше текущего значения $i. Хитрость заключается в передаче переменной в скрипт awk с опцией -v var_name=value.

Обратите внимание, что этот ответ (и ответ Раду) напечатает каждую строку, соответствующую каждой переменной . Результатом будет множество дублированных строк, для удаления их используйте sort:

while read i; do awk -v i="$i" '$3-i>10' file2; done < file1 | sort -u
0
ответ дан 28 October 2013 в 00:49

Следующий скрипт должен решить вашу проблему:

#!/bin/bash
A="$HOME/a.txt"
B="$HOME/b.txt"

cat $A | while read a; do
    cat $B | while read b; do
        b3=$(echo $b | awk ' { print $3 }')
        c=$(($b3 - $a))
        if (( $c > 10 )); then
            echo $b
        fi
    done
done

Не забудьте сделать его исполняемым с помощью следующей команды:

chmod +x script_name
0
ответ дан 28 October 2013 в 00:49

Другие вопросы по тегам:

Похожие вопросы: