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