2016-05-31 6 views
0

2つのファイルが同じ数の行と列を持ちます。私は欠損値を考慮せずに別のファイルの2番目の列から1つのファイルの2番目の列を減算したいと思います。例えば別のファイルから減算した後に選択列を出力する

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 

答えて

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

POSIXシェルスクリプト、およびペースト

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 
関連する問題