我有一个制表符分隔的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"
请帮
有了GNU awk (gawk),您可以使用以下表达式:
gawk '{gsub("t"," ",$3)}1' OFS='t' FPAT='"[^"]*"|[^t]*' file
这里的关键是FPAT
变量。它定义了字段的外观,而不仅仅是指定字段分隔符。
在本例中,字段可以是由双引号括起来的非双引号字符序列"[^"]*"
,也可以是由零个或多个非制表符组成的序列[^t]*
。(0,以正确处理空字段)
由于我们首先指定了非引号字符的顺序,因此它具有优先级