从分隔字符串中剪切出与正则表达式匹配的字段

时间:2015-02-13 21:45:56

标签: bash

示例文件:

35=A|11=ABC|55=AAA|20=DEF
35=B|66=ABC|755=AAA|800=DEF|11=ZZ|55=YYY
35=C|66=ABC|11=CC|755=AAA|800=DEF|55=UUU
35=C|66=ABC|11=XX|755=AAA|800=DEF

我希望输出打印如下,只有列11 =和55 =打印。 (他们不在固定的位置)

11=ABC|55=AAA
11=ZZ|55=YYY
11=CC|55=UUU

感谢。

2 个答案:

答案 0 :(得分:0)

试试这个:

$ awk -F'|' '{f=0;for (i=1;i<=NF;i++)if ($i~/^(11|55)=/){printf "%s",(f?"|":"")$i;f=1};print""}' file
11=ABC|55=AAA
11=ZZ|55=YYY
11=CC|55=UUU
11=XX

仅显示同时包含11字段和55字段的行:

$ awk -F'|' '/(^|\|)11=/ && /\|55=/{f=0;for (i=1;i<=NF;i++)if ($i~/^(11|55)=/){printf "%s",(f?"|":"")$i;f=1};print""}' file
11=ABC|55=AAA
11=ZZ|55=YYY
11=CC|55=UUU

答案 1 :(得分:0)

sed可能更容易:

sed -nr '/(^|\|)11=[^|]*.*\|55=/s~^.*(11=[^|]*).*(\|55=[^|]*).*$~\1\2~p' file
11=ABC|55=AAA
11=ZZ|55=YYY
11=CC|55=UUU