Awk有条件的,如果有的话

Awk有条件的,如果有的话,awk,Awk,我有一个文件,它不想弄乱序列,所以我正试图计算出我的awk条件语句 如果$3有TBstring,请删除它并将其乘以1024,如果它有GB,请删除它删除字符串GB而不执行任何操作 sast1sis01_002 iresas-p2-ris03 100.00GB 60050912017086C7700000000000021E sast1sis01_004 iresas-p2-ris03 50.00TB 60050912017086C77000

我有一个文件,它不想弄乱序列,所以我正试图计算出我的awk条件语句

如果$3有TBstring,请删除它并将其乘以1024,如果它有GB,请删除它删除字符串GB而不执行任何操作

sast1sis01_002          iresas-p2-ris03    100.00GB   60050912017086C7700000000000021E
sast1sis01_004          iresas-p2-ris03    50.00TB    60050912017086C77000000000000AAF
sast1sis01_003          iresas-p2-ris03    100.00GB   60050912017086C77000000000000BB0
sast1sis01_008          iresas-p2-ris03    100.00GB   60050912017086C77000000000000OO1
sast1sis01_005          iresas-p2-ris03    100.00GB   60050912017086C77000000000000212
sast1sis01_001          iresas-p2-ris03    100.00GB   60050912017086C77000000000000993
arrysas1_356            cbscc-u8-msas1     600.00GB   60050912017086C77000000000000BBA
N8DVP01ABC_007          iresas-z1-pit02    2.44TB     60050912017086C770000000000005EE
n2sql90abc_052          iresas-p2-sql57a   1.00TB     60050912017086C7700000000000089C
n3sq321abc_055          iresas-p2-sql57b   0          60050912017086C7700000000000011C
n6sq222abc_056          iresas-p2-sql57a   1.00GB     60050912017086C7700000000000022D
n7sqbascka_058          iresas-p2-sql57b   0          60050912017086C7700000000000039D
试一试:

awk '{s=($3=="TB")?"-":$3=$3*1024; print}';awk '{s=($3=="GB")?"-":'s/GB//g'; print}' file

请您尝试以下,书面和测试显示的样品

awk '
$3~/[tT][bB]$/{
  temp=substr($3,1,length($3)-2)
  $3=temp*1024
}
$3~/[gG][bB]/{
  $3=substr($3,1,length($3)-2)
}
1
' Input_file |column -t
说明:增加对以上内容的详细说明

awk '                                   ##Starting awk program from here.
$3~/[tT][bB]$/{                         ##Checking condition if 3rd field is equal to tT OR bB then do following.
  temp=substr($3,1,length($3)-2)        ##Creating variable temp  which has sub-string from 3rd field.
  $3=temp*1024                          ##Re-creating 3rd field which has value of temp variable and multiplying it with 1024 here.
}
$3~/[gG][bB]/{                          ##Checking condition if 3rd field is having gG OR bB then do following.
  $3=substr($3,1,length($3)-2)          ##Re-creating 3rd field which has value of 3rd field apart from last 2 char of it.
}
1                                       ##Printing current line here.
' Input_file | column -t                 ##Putting output of awk program to column command to beautify it.
上述命令有效。awk从字符串的起始部分自动将字符串转换为数字。这里它忽略GB和TB部分

如果您关心小数点后有2位精度,即使它们只是零,您也无法使用

awk '$3 ~ /TB$/ { $3 *= 1024 }; $3 ~ /GB$/ { $3 += 0 };  {$3 = sprintf("%.2f", $3) } 1'

由于这是固定宽度的数据,使用GNU awk,您可以写入:

呆呆的 开始{FIELDWIDTHS=241911*;OFS=} {$3=sprintf%-11.2f,$3*$3~/TB/?1000:1} 1. "档案" 产出:

sast1sis01_002          iresas-p2-ris03    100.00     60050912017086C7700000000000021E
sast1sis01_004          iresas-p2-ris03    50000.00   60050912017086C77000000000000AAF
sast1sis01_003          iresas-p2-ris03    100.00     60050912017086C77000000000000BB0
sast1sis01_008          iresas-p2-ris03    100.00     60050912017086C77000000000000OO1
sast1sis01_005          iresas-p2-ris03    100.00     60050912017086C77000000000000212
sast1sis01_001          iresas-p2-ris03    100.00     60050912017086C77000000000000993
arrysas1_356            cbscc-u8-msas1     600.00     60050912017086C77000000000000BBA
N8DVP01ABC_007          iresas-z1-pit02    2440.00    60050912017086C770000000000005EE
n2sql90abc_052          iresas-p2-sql57a   1000.00    60050912017086C7700000000000089C
n3sq321abc_055          iresas-p2-sql57b   0.00       60050912017086C7700000000000011C
n6sq222abc_056          iresas-p2-sql57a   1.00       60050912017086C7700000000000022D
n7sqbascka_058          iresas-p2-sql57b   0.00       60050912017086C7700000000000039D

awk'$3~/TB$/{$3=$3*1024}$3~/GB$/{$3=$3+0};{$3=sprintf%.2f,$3}1'这会破坏文件的序列。保留TB的行只会被转换。我理解这里的“序列”是指行的顺序。此命令中保留了行的顺序。在第二个命令中,只需要对行进行不必要的修改,这些修改可能会被忽略。答案的第二部分只有在小数点后的尾随零丢失是个问题时才有用。快速问题。如果我想在这里包含浮点值,我应该编辑哪一个?@gafm,你可以使用$3=sprintf%.04f,temp*1024,它将有浮点到4个点,如果这里有任何问题,请让我知道。太好了,@RavinderSingh13,这是否也会保留例如$1有一个带空格的数据?@gafm,空格部分已经处理好了,通过使用列,它美化了输出中的空间。一如既往地感谢您的帮助。请你也看看这个好吗
sast1sis01_002          iresas-p2-ris03    100.00     60050912017086C7700000000000021E
sast1sis01_004          iresas-p2-ris03    50000.00   60050912017086C77000000000000AAF
sast1sis01_003          iresas-p2-ris03    100.00     60050912017086C77000000000000BB0
sast1sis01_008          iresas-p2-ris03    100.00     60050912017086C77000000000000OO1
sast1sis01_005          iresas-p2-ris03    100.00     60050912017086C77000000000000212
sast1sis01_001          iresas-p2-ris03    100.00     60050912017086C77000000000000993
arrysas1_356            cbscc-u8-msas1     600.00     60050912017086C77000000000000BBA
N8DVP01ABC_007          iresas-z1-pit02    2440.00    60050912017086C770000000000005EE
n2sql90abc_052          iresas-p2-sql57a   1000.00    60050912017086C7700000000000089C
n3sq321abc_055          iresas-p2-sql57b   0.00       60050912017086C7700000000000011C
n6sq222abc_056          iresas-p2-sql57a   1.00       60050912017086C7700000000000022D
n7sqbascka_058          iresas-p2-sql57b   0.00       60050912017086C7700000000000039D