Awk 删除分隔字段中逗号前的文本
我有一个管道分隔的文件,我想删除字段9中逗号之前的所有文本 示例行: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
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'
。