2016-03-27 6 views
0

私は2つのテキストファイルを持っています。 「A.TXT」は1つのtxtファイルから別のtxtファイルに値を追加するときにawkでスペースを削除しますか?

A 1 AB ... 1 5 -3 4.5 (contains 11 columns. So "4.5" is in the 11th column) 
A 2 BC ... -2 3 8 9.2 
A 3 WE ... 2 3 8 5.2 
A 4 RT ... 23 2 24 4.1 
... 
END 

を含む「B.TXTは」最終2列は「A.TXT」とは異なることを除いて同様です。もう一つの違いは、 "B.txt"には "A.txt"にないいくつかの追加の行が含まれていることです。例えば、第3ラインA 3 QEW ... 5 23 34 5は私がやりたいことA.TXT」の各行の最後の列の値を抽出している「A.TXT」

A 1 AB ... 1 5 4 9 
A 2 BC ... -2 3 1 0 
A 3 QEW ... 5 23 34 5 
A 4 WE ... 2 3 -7 56 
A 5 RT ... 23 2 -5 14 
... 
END 

「B.TXT」にあるがありません"B.txt"の対応する行に追加します。 "A.txt"にない "B.txt"の各行について、3番目の列要素が文字 "Q"(例えばQEW)で始まり、それ以外の場合は値2を追加する場合は値1を追加したい。だから、出力が

A 1 AB ... 1 5 4 9 4.5 
A 2 BC ... -2 3 1 0 9.2 
A 3 QEW ... 5 23 34 5 1 
A 4 WE ... 2 3 -7 56 5.2 
A 5 RT ... 23 2 -5 14 4.1 
... 
END 

のようになります。以下awkコマンドが動作します:

NR==FNR{ 
    arr[$3] = $11 
    next 
} 
{ 
    if ($3 in arr){ 
     print($0, arr[$3]) 
    }else if ($3 == "^Q"){ 
     print($0, "2") 
    }else{ 
     print($0, "1") 
    } 
} 

は唯一の問題は私が手出力が

A 1 AB ... 1 5 4 9 
4.5 
A 2 BC ... -2 3 1 0 
9.2 
A 3 QEW ... 5 23 34 5 
1 
A 4 WE ... 2 3 -7 56 
5.2 
A 5 RT ... 23 2 -5 14 
4.1 
... 
END 
であるということである

awk -f script.awk f1 f2 

と蘭

最後の列の値をそのような新しい行に入力する必要があるので間違っています。これをどうすれば解決できますか?私がリストしたものの代わりに私が使うことができる別のコマンドがありますか?

答えて

0

あなたのコードとQのために一致していない仕様は、とにかく、ここではより多くの慣用

$ awk 'NR==FNR{a[$3]=$NF; next} 
     $3 in a{print $0, a[$3]; next} 
       {print $0, ($3~/^Q/)?1:2}' f1 f2 

印刷は通常ない関数として記述されて動作するスクリプトは、1を引用する必要はまたprint $0,1ではありませんし、 2.

+0

私はこれを試しても、私は元の質問で言及した改行の問題をまだ受けています – user5739619

+0

試しdos2unix? – karakfa

関連する問題