awk -F命令无法在linux中运行

log*_*gan 0 unix bash awk

一个简单的awk命令无法正常工作..

请告诉我这里有什么问题......

echo "hi hai hello" | awk -F"h" '{print $1}'
Run Code Online (Sandbox Code Playgroud)

我试过Linux和solaris,没有任何显示......

产出:

-bash-3.00$ echo "hi hai hello" |awk -F"h" '{print $1}'

-bash-3.00$
Run Code Online (Sandbox Code Playgroud)

Mar*_*eed 6

如果字段定界符是"h",则字段是"","i","ai"和"ello".所以第一个字段($ 1)是空字符串,它awk按要求打印出来.

通常,如果字符串以字段分隔符开头,则第一个字段为空.类似地,如果它以字段分隔符结束,则awk认为在那之后还有另一个空字段.如果有一系列字段分隔符,则它们被认为在它们之间有空字段.

查看正在发生的事情的一种方法是循环遍历所有字段并将其打印出来(可能在它们周围加上引号,这样您总能得到一些可见的输出):

echo "hi hai hello" | awk -Fh '{for (i=1;i<=NF;++i) print " $"i" = \""$i"\"" }'
 $1 = ""
 $2 = "i "
 $3 = "ai "
 $4 = "ello"
Run Code Online (Sandbox Code Playgroud)

正如Ed Morton在下面提到的,上面的分隔符规则的例外是空格,如果你没有指定一个空格,那么它就是默认的字段分隔符(或者如果你将它指定为空格).在这种情况下,任何数量的相邻水平空白字符都被视为单个字段分隔符,并且任何前导或尾随空格都被剥离:

echo " hi  hai  hello  " | awk '{for (i=1;i<=NF;++i) print " $"i" = \""$i"\"" }'
 $1 = "hi"
 $2 = "hai"
 $3 = "hello
Run Code Online (Sandbox Code Playgroud)