如果不同文件中相同位置的字段值为"zero",则修改一个文件的字段值

modify field values of one file if the value of the field at the same position in a different file is "zero"

我有两个文件文件 A 和文件 B。文件 A 包含一些值 = 0 。基于文件 A "zero" 值的位置,文件 B 字段将被设为空“”。输出和输入的示例如下所示。我大致了解该怎么做但不确定,有人可以提供帮助。谢谢。

File A

ABDC1

9.88E2 9.00E1 6.50E2 5.40E1 7.43E1

6.55E2 9.89E2 0.00E0 5.45E2 7.76E1

9.88E1 9.00E2 0.00E0 5.45E1 7.67E2

6.55E2 9.89E1 5.44E2 5.45E2 9.88E2

0.377E2

EFG3

9.88E2 9.00E2 0.00E0 5.54E1 7.67E2

7.55E2 9.98E2 5.44E2 4.54E2 0.00E0

5.88E2 9.60E1 0.00E0 5.40E1 4.67E2

4.55E2 0.00E0 5.45E2 4.00E0 9.88E2

6.43E2


File B


ABDC1

8.00E0 9.40E0 6.30E0 5.43E2 7.20E1

5.00E0 9.80E1 6.50E1 5.50E1 7.76E1

9.00E0 9.70E1 6.70E1 5.54E2 7.67E2

6.50E1 9.98E2 5.48E2 5.45E2 9.88E2

6.76E1

EFG3

4.88E2 9.30E1 6.80E1 5.30E1 7.60E1

6.55E2 9.80E1 5.40E1 4.50E1 7.70E1

1.88E2 6.00E0 1.00E1 5.00E0 4.60E1

5.50E1 5.40E1 5.40E1 4.50E1 9.80E1

6.65E2


Output expected:

FILE 3 (Output):


ABDC1

8.00E0 9.40E0 6.30E0 5.43E2 7.20E1

5.00E0 9.80E1 5.50E1 7.76E1

9.00E0 9.70E1 5.54E2 7.67E2

6.50E1 9.98E2 5.48E2 5.45E2 9.88E2

6.76E1

EFG3

4.88E2 9.30E1 5.30E1 7.60E1

6.55E2 9.80E1 5.40E1 4.50E1  

1.88E2 6.00E0 5.00E0 4.60E1

5.50E1 5.40E1 4.50E1 9.80E1

6.65E1

我正在尝试做这样的事情:file4.txt 和 file3.txt 与上面的文件 A 和 B 相同

 #!/bin/bash

    cp file4.txt temp.txt
    touch temp2.txt 

    i=1

    while IFS=' ' read -r f1 f2 f3 f4 f5


    do

      if [ $f$i = "0.00E0" ]

         then

              while IFS=' ' read -r r1 r2 r3 r4 r5

                 do

                    sed 's/$r$i/""/g' temp.txt >> temp2.txt


                  done <file4.txt

       fi

    let "i=i+1"

    done <file3.txt

你可以使用这个 awk:

awk 'FNR==NR && NF==1{s=;next}
     FNR==NR{for(i=1; i<=NF; i++) if ($i=="0.00E0") a[s,FNR*100+i]++; next} 
     NF==1{s=;print s;next}
     NF==5{for(i=1; i<=NF; i++) if (a[s,FNR*100+i]==1) $i=""
} 1' fileA fileB | | column -t
ABDC1
8.00E0  9.40E0  6.30E0  5.43E2  7.20E1
5.00E0  9.80E1  5.50E1  7.76E1
9.00E0  9.70E1  5.54E2  7.67E2
6.50E1  9.98E2  5.48E2  5.45E2  9.88E2
EFG3
4.88E2  9.30E1  5.30E1  7.60E1
6.55E2  9.80E1  5.40E1  4.50E1
1.88E2  6.00E0  5.00E0  4.60E1
5.50E1  5.40E1  4.50E1  9.80E1