从另一个文件

时间:2016-05-31 03:07:54

标签: linux shell awk

我有两个行数和行数相同的文件。我想从另一个文件中的第二列中减去一个文件中的第二列,而不考虑缺少的值。 e.g。

ifile1.txt    
3  5  2  2
1  ?  2  1
4  6  5  2
5  5  7  1

ifile2.txt
1  2  1  3
1  3  0  2
2  ?  5  1
0  0  1  1

这里“?”是缺失值,不应在计算中考虑。

ofile.txt i.e. [$2(ifile1.txt) - $2(ifile2.txt)]
3
?
?
5

我能够以下列方式没有任何缺失值。但是不能像这里一样缺少价值“?”。

paste ifile1.txt ifile2.txt > ifile3.txt
awk '{n=NF/2; for (i=1;i<=n;i++) printf "%5.2f ", $i-$(i+n); print ""}' ifile3.txt > ifile4.txt
awk '{printf ("%.2f\n",$2)}' ifile4.txt > ofile.txt

2 个答案:

答案 0 :(得分:3)

$ awk 'NR==FNR{a[NR]=$2;next} {print ((a[FNR]$2)~/?/ ? "?" : a[FNR]-$2)}' file1 file2
3
?
?
5

答案 1 :(得分:1)

POSIX shell脚本,粘贴

paste ifile[12].txt | \
 while read a b c d  e f g ; do \
       [ "$b$f" -eq "$b$f" ] 2> /dev/null \
         && echo $(( b - f )) \
         || echo '?' ; \
 done

输出:

3
?
?
5