在FS = "\t"
中使用AWK
时,空白字段分隔符的默认值是一个或多个。因此,如果要在某些列(不是最后一列)中读取带有空值的制表符分隔文件,则会跳过它们。例如:
1 "\t" 2 "\t" "" "\t" 4 "\t" 5
$3
会引用4
,而不是null ""
,即使有两个标签。
我该怎么办才能将字段分隔符指定为仅一个标签,以便$4
引用4
而不是5
?
答案 0 :(得分:1)
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}'
<强> OUTPUT2 强>
$3= $4=4
你是对的,默认的FS是空白区域,并且警告空格和制表符彼此相邻,可以作为1 FS实例。因此,只使用“\ t”作为FS,您可以像上面的cmd-line参数那样执行,或者可以在FS上包含explict重置,通常在BEGIN
块中完成,如
echo '1 "\t" 2 "\t" "" "\t" 4 "\t" 5' | awk 'BEGIN{FS="\t"}{print "$3="$3 , "$4="$4}'
IHTH