如何在AWK中指定* one * tab作为字段分隔符?

时间:2013-08-08 01:02:22

标签: tabs awk field separator

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

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

$3会引用4,而不是null "",即使有两个标签。

我该怎么办才能将字段分隔符指定为仅一个标签,以便$4引用4而不是5

1 个答案:

答案 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