3

空白字段分隔符的默认值,例如使用时的制表符FS = "\t",inAWK是一个或多个。因此,如果您想在制表符分隔的文件中读取某些列(除了最后一列)中的空值,它会跳过它们。例如:

1 "\t" 2 "\t" "" "\t" 4 "\t" 5

$3将指4, 不是 null""即使显然有两个选项卡。

我应该怎么做才能将字段分隔符指定为仅一个选项卡,以便$4引用4而不是5

4

1 回答 1

3
 echo '1 "\t" 2 "\t" "" "\t" 4 "\t" 5' | awk -F"\t" '{print "$3="$3 , "$4="$4}'

输出

$3=" "" " $4=" 4 " 

因此,您可以删除原始字符串中的 dbl-quotes,并获得

echo '1\t2\t\t4\t5' | awk -F"\t" '{print "$3="$3 , "$4="$4}'

输出2

$3= $4=4

你是对的,默认的 FS 是空白,需要注意的是空格和制表符彼此相邻,将有资格作为 1 个 FS 实例。因此,要仅使用“\t”作为您的 FS,您可以像上面那样作为 cmd-line 参数执行,或者您可以在 FS 上包含一个显式重置,通常在一个BEGIN块中完成,例如

echo '1 "\t" 2 "\t" "" "\t" 4 "\t" 5' | awk 'BEGIN{FS="\t"}{print "$3="$3 , "$4="$4}'

IHTH

于 2013-08-08T01:17:28.443 回答