Bash 使用awk提取模式之间的部分文件路径
我试图从文件路径列表中提取数据,因为我希望创建已完成加载的文件日志。问题是每个文件路径都不一致,所以我需要在两个正则表达式模式之间查找部分文件路径 例如,假设我想提取两条信息……比如说,在/system/../之间的数据和在/data/../之间的另一条数据/Bash 使用awk提取模式之间的部分文件路径,bash,awk,Bash,Awk,我试图从文件路径列表中提取数据,因为我希望创建已完成加载的文件日志。问题是每个文件路径都不一致,所以我需要在两个正则表达式模式之间查找部分文件路径 例如,假设我想提取两条信息……比如说,在/system/../之间的数据和在/data/../之间的另一条数据/ /user/project-x/system/ibm/nyc/data/customers/sales/yyyymmdd /user/project-x/system/mysql/data/regional/sales/yyyymmdd
/user/project-x/system/ibm/nyc/data/customers/sales/yyyymmdd
/user/project-x/system/mysql/data/regional/sales/yyyymmdd
/user/project-x/system/mysql/london/data/customers/sales/yyyymmdd
/user/project-x/system/oracle/data/tokyo-customers/Sales/yyyymmdd
所以,当我运行awk脚本时,我会留下
ibm customers
mysql regional
mysql customers
oracle tokyo-customers
还有什么方法可以进行这种类型的文件路径拆分吗?我发现您的路径部分是固定的,所以不需要使用正则表达式。 字段分离实现了以下目的:
awk -F/ '{print $4,$7}' test.txt
(其中,test.txt
是您的输入文件)
基本上,你告诉代码< AWK < /C> >将斜线视为字段分隔符,打印字段为4和7。 但要用字段查找回答您的问题,请执行以下操作(尽管更复杂)
awk-F/'{a=“???”b=“???”for(i=0;i带sed
:
sed -E 's_.*/system/([^/]+).*/data/([^/]+)/[Ss]ales/.*_\1 \2_'
*/system/([^/]+).
匹配/system/
之后的部分,直到下一个/
,并放入捕获的组1
/data/([^/]+)/[Ss]ales/
匹配/data/
和/sales/
(或/sales/
)之间的部分,并放入第二个捕获组
- 在替换中,使用捕获的组,并用空格分隔
示例:
$ cat file.txt
/user/project-x/system/ibm/nyc/data/customers/sales/yyyymmdd
/user/project-x/system/mysql/data/regional/sales/yyyymmdd
/user/project-x/system/mysql/london/data/customers/sales/yyyymmdd
/user/project-x/system/oracle/data/tokyo-customers/Sales/yyyymmdd
$ sed -E 's_.*/system/([^/]+).*/data/([^/]+)/[Ss]ales/.*_\1 \2_' file.txt
ibm customers
mysql regional
mysql customers
oracle tokyo-customers
感谢您的快速响应和近乎完美的回复,问题是我不能依赖文件编号,因为即使在我的简单示例中,我想要的列也不都在第7列中。有没有办法计算最后一列的位置和执行类似于$n-2的操作?请参阅我的编辑。我意识到我并没有真正回答所问的问题这很好,也很灵活!
$ cat file.txt
/user/project-x/system/ibm/nyc/data/customers/sales/yyyymmdd
/user/project-x/system/mysql/data/regional/sales/yyyymmdd
/user/project-x/system/mysql/london/data/customers/sales/yyyymmdd
/user/project-x/system/oracle/data/tokyo-customers/Sales/yyyymmdd
$ sed -E 's_.*/system/([^/]+).*/data/([^/]+)/[Ss]ales/.*_\1 \2_' file.txt
ibm customers
mysql regional
mysql customers
oracle tokyo-customers