替换制表符分隔文件中封闭字符串中的制表符 linux
replace tab in an enclosed string in a tab delimited file linux
我有一个制表符分隔的 txt 文件,其中第三列包含可能也有制表符的封闭字符串。由于这个额外的制表符,当我尝试读取这个制表符分隔的文件时,我得到了 5 列。所以我想用 space 替换选项卡。
以下是示例文件。
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","",); print }' file.txt
之后我得到以下输出
col3
"pqr
"lmn
"asd"
请帮忙
有了 GNU awk (gawk),您可以使用以下表达式:
gawk '{gsub("\t"," ",)}1' OFS='\t' FPAT='"[^"]*"|[^\t]*' file
这里的关键是FPAT
变量。它定义了字段的外观,而不仅仅是指定字段分隔符。
在我们的例子中,字段可以是用双引号括起来的非双引号字符序列 "[^"]*"
,也可以是零个或多个非制表符字符序列 [^\t]*
。 (零,正确处理空字段)
由于我们首先指定非引号字符的顺序,因此它具有优先权。
我有一个制表符分隔的 txt 文件,其中第三列包含可能也有制表符的封闭字符串。由于这个额外的制表符,当我尝试读取这个制表符分隔的文件时,我得到了 5 列。所以我想用 space 替换选项卡。
以下是示例文件。
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","",); print }' file.txt
之后我得到以下输出
col3
"pqr
"lmn
"asd"
请帮忙
有了 GNU awk (gawk),您可以使用以下表达式:
gawk '{gsub("\t"," ",)}1' OFS='\t' FPAT='"[^"]*"|[^\t]*' file
这里的关键是FPAT
变量。它定义了字段的外观,而不仅仅是指定字段分隔符。
在我们的例子中,字段可以是用双引号括起来的非双引号字符序列 "[^"]*"
,也可以是零个或多个非制表符字符序列 [^\t]*
。 (零,正确处理空字段)
由于我们首先指定非引号字符的顺序,因此它具有优先权。