簡體   English   中英

如何在Shell腳本中使用awk命令減去也包含字符的列中的整數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM