在awk中使用的Bash int变量问题

  • 本文关键字:Bash int 变量 问题 awk awk
  • 更新时间 :
  • 英文 :


我有两个文件,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

最新更新