Awk 删除分隔字段中逗号前的文本

Awk 删除分隔字段中逗号前的文本,awk,pipe,delimiter,comma,Awk,Pipe,Delimiter,Comma,我有一个管道分隔的文件,我想删除字段9中逗号之前的所有文本 示例行: www.upstate.edu|upadhyap|Prashant K Upadhyaya, MD||General Surgery|http://www.upstate.edu/hospital/providers/doctors/?docID=upadhyap|Patricia J. Numann Center for Breast, Endocrine & Plastic Surgery|Upstate Spec

我有一个管道分隔的文件,我想删除字段9中逗号之前的所有文本

示例行:

www.upstate.edu|upadhyap|Prashant K Upadhyaya, MD||General Surgery|http://www.upstate.edu/hospital/providers/doctors/?docID=upadhyap|Patricia J. Numann Center for Breast, Endocrine & Plastic Surgery|Upstate Specialty Services at Harrison Center|Suite D, 550 Harrison Street||Syracuse|NY|13202|
因此,目标字段是:
|哈里森街550号D套房|

我希望它看起来像:
|哈里森街550号

到目前为止,我尝试的方法要么删除了其他字段的信息(通常是字段3中的名称),要么没有效果

我一直试图编写的.awk脚本如下所示:

mv $1 $1.bak4 
cat $1.bak4 | awk -F "|" '{
    gsub(/*,/,"", $9);
    print $0
}'  > $1

gsub
的模式参数是一个正则表达式而不是一个glob。你的*不符合你的期望。您希望
/.*,/
在那里。您还需要
OFS
to |来保留该分隔符

mv $1 $1.bak4 
awk 'BEGIN{ FS = OFS = "|" }{ gsub(/.*,/,"",$9) } 1' $1.bak4 > $1

我还用真实模式(
1
)替换了您的详细打印行,该模式使用默认操作为打印的事实。

不清楚环境是什么。这是一个shell脚本吗
bash
sh
?如果要删除前导空格,也可以像这样
awk'BEGIN{FS=OFS=“|”}{sub(/.*,*/,“”,$9)}1'