簡體   English   中英

如果awk中file1的$ 3 <0,則基於列比較兩個文件

[英]comparing two files based on column if $3 of file1 is <0 in awk

根據文件1的第2列比較兩個文件。 如果file1的$ 3 <0,file2的$ 3為'n',則打印行file2,否則,如果file1的$ 3為> 0,而file2的$ 3為'p',則打印行file2,否則為null。

文件1

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

文件2

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

輸出如下:

1; a; n;
2; b; n;
4; d; p; 

使用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;

將文件一的第三列存儲在數組的第二列。 對於第二個文件,只需測試您的條件即可。 如果任何一個為true,則默認情況下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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM