Сравнение двух файлов на основе 2-го столбца файла file1. если $ 3 файла1 <0 и $ 3 файла2 равно 'n', тогда печать строки file2, иначе, если $ 3 файла1> 0 и $ 3 файла2 равно 'p', то печать строки file2 иначе null print.

File1

1;  a; -16;
2;  b; -3;
3;  c; -4; 
4;  d;  5;

File2

1; a;  n;
2; b;  n;
3; c;  p;
4; d;  p;
5; e;  p;

Вывод выглядит так:

1; a; n;
2; b; n;
4; d; p; 
-1
dileeps.iitb 29 Май 2014 в 09:28

2 ответа

Лучший ответ

Использование awk:

awk -F'; *' 'NR==FNR{a[$2]=$3;next}$3=="n" && a[$2]<0 || $3=="p" && a[$2]>0' file1 file2
1; a;  n;
2; b;  n;
4; d;  p;

Сохраните 3-й столбец файла, индексированный во 2-м столбце в массиве. Для второго файла просто проверьте свое состояние. Если одно из них истинно, awk по умолчанию напечатает строку для вас.

2
jaypal singh 29 Май 2014 в 09:44

Воспользуйтесь этим простым скриптом и получите свой результат.

    #!/bin/bash
    while 
    read -r lineA <&3          
    read -r lineB <&4       
    do
    val1=`echo "$lineA" | cut -d";" -f3`
    val2=`echo "$lineB" | cut -d";" -f3`
    if [ -n "$val1" ] && [ -n "$val2" ] ; then
            if [ $val1 -lt 0 ] && [ $val2 == "n" ]  ; then
                    echo  "$lineB" 
            elif [ $val1 -gt 0 ] && [ $val2 == "p" ]  ;then
                    echo "$lineB" ;
            fi
    fi

  done 3<a.txt 4<b.txt
0
Kalanidhi 29 Май 2014 в 10:10
** Спасибо Каланиди М. **
 – 
dileeps.iitb
29 Май 2014 в 11:15