我有两个文件,fistart"文件.txt";有几行,下一个文件:";output.txt为空";,示例:
cat file.txt
Line1 x i 12gb
Line2 x u 13.7gb
Line3 x q 4.3gb
Line4 x t 33gb
Line5 f t 29.04gb
Line6 f t 38gb
cat output.txt
我只需要在大小大于30的地方对行进行grep,并将大小分开,例如29.04gb到29.04gb(带白字(,但我的脚本(在awk中(有问题:
#!/bin/bash
plik=file.txt
OUT=output.txt
awk '{if (30<=$2) print $1, $4}' $plik >$OUT
我的output.txt文件看起来:
Line3 4.3gb
Line4 33gb
Line6 38gb
你能告诉我我的锥子线哪里有问题吗?
使用您显示的示例,请尝试以下操作。
awk '$NF+0>30' Input_file
如果最后一个字段(其中+0将只取数字(大于30,只需检查条件,如果此条件为TRUE,则打印该行。
我会使用GNUAWK
,让file.txt
的内容是
Line1 x i 12gb
Line2 x u 13.7gb
Line3 x q 4.3gb
Line4 x t 33gb
Line5 f t 29.04gb
Line6 f t 38gb
然后
awk '{$0=gensub(/([[:alpha:]]+$)/, " \1", 1)}$4>=30{print $1, $4, $5}' file.txt
输出
Line4 33 gb
Line6 38 gb
说明:我指示AWK在行的末尾($
(查找字母([[:alpha:]]
(,并在它们之前插入空格,这样第4列就变成了数字本身,第5列变成了gb
,然后当第4列的值不等于30
时,我打印第1、第4和第5列。
(在GNU Awk 5.0.1中测试(
听起来这就是你想要的:
$ awk '($NF+0)>30{sub(/[[:alpha:]]/," &",$NF); print $NF}' file.txt
33 gb
38 gb
或者:
$ awk '($NF+0)>30{sub(/[[:alpha:]]/," &",$NF); print $1, $NF}' file.txt
Line4 33 gb
Line6 38 gb