[英]how can the awk command in Shell scripting be used to subtract integers in columns that also contain characters?
我有一個看起來像這樣的txt文件
col 1 col 2 col 3 col 4
A 12.6e12 058 12ED08
B 10.2e09 070 40ED01
C 13.5e08 046 73ED02
如果我想從第3列中減去第4列的前2位數字,即忽略“ ED”,而從第4列中減去后2位數字,如何使用awk命令執行此操作? 並且如果我想使用awk添加第2列和第3列,我如何將'e'之后的數字作為指數? 一個簡單的輸出是
col 1 col 4-col 3
A -46 (12-058)
B -30 (40-070)
C 27 (73-046)
在Perl中很容易,在awk中也應該同樣容易:
perl -lane 'print $F[1] + $F[2], "\t", $F[3] - $F[2]' input-file
-n
逐行處理輸入 -a
將輸入拆分為@F
數組 -l
附加換行符以print
Perl不理解“科學符號”,因此不需要任何工作來解釋12.6e12。 在字符串上使用算術運算符時,Perl嘗試通過從左邊開始盡可能多的字符將它們轉換為數字,因此它會忽略col4中的ED...
使用awk(1)
:
$ awk '{print $1 "\t" $4-$3 "\t(" int($4) "-" $3 ")"}' << EOF
> A 12.6e12 058 12ED08
> B 10.2e09 070 40ED01
> C 13.5e08 046 73ED02
> EOF
A -46 (12-058)
B -30 (40-070)
C 27 (73-046)
Awk是您的朋友在這里:
awk -F '[[:blank:]e]+|ED' 'FNR==1{print "col 1 col 4-col 3";next}{print $1 "\t" ($5-$4) "\t(" $5 "-" $4 ")"}' YourFile
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.