Сравнение двух файлов на основе 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;
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
по умолчанию напечатает строку для вас.
Воспользуйтесь этим простым скриптом и получите свой результат.
#!/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
Похожие вопросы
Новые вопросы
bash
Этот тег предназначен для вопросов о сценариях, написанных для командной оболочки Bash. Сценарии оболочки с синтаксисом или другими ошибками, пожалуйста, проверьте их на https://shellcheck.net, прежде чем публиковать здесь. Вопросы об интерактивном использовании Bash, скорее всего, будут актуальны на Unix & Linux Stack Exchange или Super User, чем на Stack Overflow.