use*_*766 5 awk tabs field separator
空白字段分隔符(例如使用FS = "\t"
, in时的制表符)的默认值AWK
是一个或多个。因此,如果您想读入制表符分隔的文件,其中某些列(最后一列除外)中包含空值,它将跳过它们。例如:
1 "\t" 2 "\t" "" "\t" 4 "\t" 5
Run Code Online (Sandbox Code Playgroud)
$3
即使明显有两个选项卡,也会引用4
,而不是 null 。""
我应该怎么做才能将字段分隔符指定为仅一个选项卡,以便引用而不$4
引用?4
5
echo '1 "\t" 2 "\t" "" "\t" 4 "\t" 5' | awk -F"\t" '{print "$3="$3 , "$4="$4}'
Run Code Online (Sandbox Code Playgroud)
输出
$3=" "" " $4=" 4 "
Run Code Online (Sandbox Code Playgroud)
所以你可以删除原始字符串中的双引号,并得到
echo '1\t2\t\t4\t5' | awk -F"\t" '{print "$3="$3 , "$4="$4}'
Run Code Online (Sandbox Code Playgroud)
输出2
$3= $4=4
Run Code Online (Sandbox Code Playgroud)
你是对的,默认的 FS 是空格,但需要注意的是,空格和制表符彼此相邻,将有资格作为 1 个 FS 实例。因此,要仅使用“\t”作为 FS,您可以像上面那样作为命令行参数执行操作,或者您可以在 FS 上包含显式重置,通常在块中完成BEGIN
,例如
echo '1 "\t" 2 "\t" "" "\t" 4 "\t" 5' | awk 'BEGIN{FS="\t"}{print "$3="$3 , "$4="$4}'
Run Code Online (Sandbox Code Playgroud)
IHTH