9

以下に示すようなテキストファイルがいくつかあります。列2と4の値を減算したいので、出力に新しい列を作成する必要があります。

co1  co2   co3    co4

r1  15.2  13.0   21.4
r2  23    15     15.7
r3  14    8      12

希望する出力

co1  co2   co3   co4   diff.    

r1  15.2  13.0   21.4   -6.2
r2  23    15     15.7   7.3
r3  14    8      12     2
4

3 に答える 3

14

注:awkコマンドをすべて1行にまとめることもできますが、これはより適切です(さらに、必要に応じて、より透過的で変更が容易になります)。

このso.awkスクリプト:

NR==1{print $0, "   diff.\n"}
NR>2{printf("%s\t%5.1f\n", $0, $2-$4)}

与える:

co1  co2   co3   co4     diff.

r1  15.2  13.0   21.4    -6.2
r2  23    15     15.7     7.3
r3  14    8      12       2.0

ファイル内のデータを指定して、次のdata.txtコマンドを発行します。

 awk -f so.awk data.txt

(正確なニーズに合わせてフォーマットを調整する必要がある場合があります)

于 2012-08-17T11:46:45.513 に答える
10

このワンライナーは機能します:

awk 'NR == 1 { $5 = "diff." } NR >= 3 { $5 = $2 - $4 } 1' <input.txt

それは与えます:

co1 co2 co3 co4 diff.

r1 15.2 13.0 21.4 -6.2
r2 23 15 15.7 7.3
r3 14 8 12 2

フィールドをタブで区切る場合、これは必要なワットです。

awk 'BEGIN { OFS = "\t" } NR == 1 { $5 = "diff." } NR >= 3 { $5 = $2 - $4 } 1' <input.txt
于 2012-08-17T12:08:56.777 に答える
8

ヘッダーがない場合は、宮川拓のワンライナーを簡略化できます。

awk '{ $5 = $2 - $4 } 1' input.txt > inputdiff.txt

またはタブ分離あり:

awk 'BEGIN { OFS = "\t" } { $5 = $2 - $4 } 1' input.txt > inputdiff.txt
于 2014-10-24T14:41:03.410 に答える