替换选项卡分隔文件linux中的封闭字符串中的选项卡

时间:2015-07-23 09:06:18

标签: linux unix awk gsub

我有一个制表符分隔的txt文件,其中第三列包含可能还有一个制表符的封闭字符串。由于这个额外的选项卡,当我尝试读取此选项卡分隔文件时,我得到5列。所以我想用空格替换标签。

以下是示例文件。

col1   col2   col3        col4  
1      abc    "pqr   xyz" asd  
2      asd    "lmn   pqr" aws  
3      abc    "asd"       lmn

我想要像这样的输出

col1   col2   col3        col4  
1      abc    "pqr xyz"   asd  
2      asd    "lmn pqr"   aws  
3      abc    "asd"       lmn

这是我试过的

awk -F"\t" '{ gsub("\t","",$3); print $3 }' file.txt

之后我得到了以下输出

col3  
"pqr  
"lmn  
"asd"

请帮忙

1 个答案:

答案 0 :(得分:3)

使用GNU awk(gawk),您可以使用以下表达式:

Key

这里的关键是gawk '{gsub("\t"," ",$3)}1' OFS='\t' FPAT='"[^"]*"|[^\t]*' file 变量。它定义了字段的外观,而不是仅指定字段分隔符。

在我们的例子中,字段可以是用双引号FPAT括起来的非双引号字符序列,也可以是零或多个非制表字符"[^"]*"的序列。 (零,正确处理空字段)

由于我们首先指定非引号字符序列,因此它具有优先权。