bash - Awk 将双引号字符串视为一个标记并忽略其间的空格

标签 bash unix awk

数据文件-data.txt:

ABC "I am ABC" 35 DESC
DEF "I am not ABC" 42 DESC

cat data.txt | awk '{print $2}'

将导致“I”而不是被引用的字符串

如何使 awk 忽略引号内的空格并认为它是一个单独的标记?

最佳答案

另一种选择是使用 FPAT变量,它定义了描述每个字段内容的正则表达式。

将此 AWK 脚本保存为 parse.awk:

#!/bin/awk -f

BEGIN {
  FPAT = "([^ ]+)|(\"[^\"]+\")"
}
{
  print $2
}

使用 chmod +x ./parse.awk 使其可执行并将您的数据文件解析为 ./parse.awk data.txt:

"I am ABC"
"I am not ABC"

关于bash - Awk 将双引号字符串视为一个标记并忽略其间的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6619619/

相关文章:

linux - 找不到意外的运算符(Bash 错误)

c++ - _Exit 在 C++ 程序中的行为如何?

awk - Bash 提取三位数版本的第一个数字

linux - 仅当包含它的行还包含使用 Bash 在另一个文件中找到的数字时,如何替换文件中的字符串?

mysql - 在 bash 脚本中执行多个 MySQL 查询

Bash 脚本无法在新的专用服务器上运行

linux - shell和环境变量的区别

bash - 在文本 b 中查找文本 a 中的所有值,然后使用 awk 在其旁边键入其他文件中的其他列

python - 将参数从 bash 文件传递​​给 python 脚本

linux - 使用另一个命令进行管道传输时如何读取命令的返回码