如何筛选仅在WHERE后出现ALP_ACCT_PROD_ID的文件行?
筛选WHERE之后出现指定字段的行
给定文件File1.csv内容如下:
Apple is red WHERE the column ALP_ACCT_PROD_ID, it can be plucked Apple is red ON ALP_ACCT_PROD_ID , WHERE it can be plucked
需求是仅保留ALP_ACCT_PROD_ID出现在WHERE之后的行,以下是两种可行的解决方法:
方法一:使用grep的Perl正则模式
利用正向肯定预查匹配WHERE之后的目标字段:
grep -P '(?<=WHERE.*)ALP_ACCT_PROD_ID' File1.csv
解释:(?<=WHERE.*)是正向预查断言,确保ALP_ACCT_PROD_ID的前面存在WHERE(中间可包含任意字符),只会匹配符合位置要求的行。
方法二:使用awk判断位置关系
通过字符串位置比较实现筛选:
awk 'index($0,"ALP_ACCT_PROD_ID") > index($0,"WHERE")' File1.csv
解释:index($0, "字符串")返回该字符串在当前行的起始位置,当ALP_ACCT_PROD_ID的位置大于WHERE的位置时,说明WHERE出现在目标字段之前,此时打印该行。
原命令grep ALP_ACCT_PROD_ID会返回所有包含目标字段的行,无法区分位置顺序,因此不满足需求。
内容的提问来源于stack exchange,提问作者Samrat Saha
相关产品推荐
相关产品推荐

