如何用awk提取input.txt中单引号内内容并去除多余逗号?
解决方法
以下几种awk命令可以满足你的需求:
方法1:正则捕获组提取
利用awk的match函数匹配单引号内的内容,通过捕获组直接提取目标值:
awk '{match($0, /\'lhs\' : \'([^\']+)\'/, lhs); match($0, /\'rhs\' : \'([^\']+)\'/, rhs); print lhs[1], rhs[1]}' input.txt
原理:用正则匹配'lhs' : 'XXX'和'rhs' : 'XXX'的格式,把XXX部分捕获到数组中,直接输出捕获的内容。
方法2:自定义字段分隔符
通过设置字段分隔符为单引号、逗号、冒号、空格的组合,直接定位到目标字段:
awk -F"[':, ]+" '{print $6, $10}' input.txt
原理:把所有非目标内容的符号都设成分隔符,这样原本的数值就变成了独立的字段,直接提取对应位置的字段即可。
方法3:修改原字段内容
基于你最初的命令,对提取出的字段做清洗,去掉单引号和逗号:
awk '{gsub(/['',]/, "", $5); gsub(/['']/, "", $8); print $5, $8}' input.txt
原理:用gsub函数把$5里的单引号和逗号替换为空,把$8里的单引号替换为空,再输出处理后的字段。
以上三种方法执行后,都会得到你想要的输出:
0 \emptyset 6 \partial
内容的提问来源于stack exchange,提问作者Tryer
相关产品推荐
相关产品推荐

