Awk有条件的,如果有的话
我有一个文件,它不想弄乱序列,所以我正试图计算出我的awk条件语句 如果$3有TBstring,请删除它并将其乘以1024,如果它有GB,请删除它删除字符串GB而不执行任何操作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
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