linux 对一个文件中同一行的两个字符串进行模式匹配后提取一个字和一个金额字段

rhfm7lfc  于 2023-01-12  发布在  Linux
关注(0)|答案(2)|浏览(180)

对中的两个字符串进行模式匹配后,提取一个单词和一个金额字段
一个文件的同一行
第一个单词需要在SEC之后和::之前提取
AVAI后需要提取金额字段:
输入:

10A:SEC SECRTY::security tip:10B::AVAI:3000,:10c:RUI
10A:SEC KGTY::STAR Gather ltd:10B::AVAI:90000,:10c:SUR
10A:SEC VYTRIY::Query bench:10B::AVAI:2400,:10c:VYT

输出:

SECRTY,3000
KGTY,90000
VYTRIY,2400

尝试使用awk命令

e3bfsja2

e3bfsja21#

使用sed替换:

$ sed -E "s/.*SEC ([^:]+).*:AVAI:([^,]+).*/\1,\2/g" test.txt
SECRTY,3000
KGTY,90000
VYTRIY,2400
1sbrub3j

1sbrub3j2#

这个awk可以做到这一点。设置字段分隔符为':',设置输出字段分隔符为','。对于第2列,删除所有内容,包括空格。对于第8列,删除尾部逗号。然后打印第2列和第8列。

$ awk -F':' 'BEGIN { OFS = ","} {gsub(/^.* /, "", $2); gsub(/,?$/, "", $8); print $2,$8}' file.txt
SECRTY,3000
KGTY,90000
VYTRIY,2400
$

相关问题