我有两个文件文件A和文件B.文件A包含一些值= 0。基于文件A的位置“零”值,文件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
答案 0 :(得分:1)
你可以使用这个awk:
awk 'FNR==NR && NF==1{s=$1;next}
FNR==NR{for(i=1; i<=NF; i++) if ($i=="0.00E0") a[s,FNR*100+i]++; next}
NF==1{s=$1;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