使用 awk,您将如何分配“null”值来读取?
我确定这有一个固定的字符,我只是找不到它。
例如,
我有一串这样的awk:
awk '
$3==24{print "stuff"}
$3==23{print "stuff"}
'
我需要知道如何使用相同的格式来计算空白列,以便 if $3 = blank {print "stuff"}
谢谢!
尝试这样做:
awk '
$3==24{print "stuff"}
$3==23{print "stuff"}
!$3{print "null"}
' file.txt
如果您需要处理$3
它是否为零(false
for awk
),请尝试这样做:
!$3 && $3 != 0{print "null"}
在默认的 awk 处理中,没有“空白”列之类的东西。
字段由空格分隔,即一个或多个空格字符(基本上是制表符和空格)。所以给定这个输入:
this that the_other
foo bar
对于第一行$1
, $2
, 和$3
, , 和this
,和, 但对于第二行是, 不管第一和第二字段之间有多少空白。that
the_other
bar
$2
如果您指定不同的字段分隔符,则可以有空字段:
$ ( echo 'this:that:the_other' ; echo 'foo::bar' ) | awk -F: '{print $3}'
the_other
bar
或者,如果您更喜欢在脚本本身中设置字段分隔符:
$ ( echo 'this:that:the_other' ; echo 'foo::bar' ) | \
awk 'BEGIN { FS = ":" } {print $3}'
the_other
bar
但是您可以使用正则表达式作为字段分隔符:
$ ( echo 'this that the_other' ; echo 'foo bar' ) | \
awk 'BEGIN { FS = "[ ]" } {print $3}'
the_other
bar
(一些非常老的 Awk 实现在这里可能不支持它的正则表达式。)
正则表达式"[ ]"
没有得到与空格字符相同的特殊处理。
对 GNU awk 手册的参考:
字段通常由空格序列(空格、制表符和换行符)分隔,而不是由单个空格分隔。一行中的两个空格不分隔空字段。字段分隔符的默认值
FS
是一个包含单个空格的字符串," "
. 如果 awk 以通常的方式解释这个值,每个空格字符将分隔字段,因此一行中的两个空格将在它们之间形成一个空字段。不会发生这种情况的原因是单个空格作为 的值FS
是一种特殊情况——它被用来指定分隔字段的默认方式。如果
FS
是任何其他单个字符,例如","
,则该字符的每次出现都会分隔两个字段。两个连续的事件界定了一个空字段。如果字符出现在行首或行尾,则也将界定一个空字段。空格字符是唯一不遵循这些规则的单个字符。
但要小心这一点;要么您必须修改文件以使用不同的分隔符,要么您的解析将对字段之间的空格数敏感(foo bar
(有一个空格)将不同于foo bar
(有两个空格))。
根据您的应用程序,您可能会考虑按列号而不是按 awk 识别的字段来解析行。