说我在文件中有这个,(FIX消息)
35=D|11=ABC|52=123456|33=AA|44=BB|17=CC 35=D|33=ABC|11=123456|44=ZZ|17=EE|66=YY
我想grep并仅打印11=
和17=
之后的值,输出如下。
ABC|CC 123456|EE
我如何实现这一目标?
答案 0 :(得分:3)
每当输入中有name = value对时,我发现它有助于清晰,未来的增强等,以创建一个name2value数组,然后使用它来按名称打印值:
$ cat tst.awk
BEGIN { FS="[|=]"; OFS="|" }
{
delete n2v
for (i=1; i<=NF; i+=2) {
n2v[$i] = $(i+1)
}
print n2v[11], n2v[17]
}
$ awk -f tst.awk file
ABC|CC
123456|EE
答案 1 :(得分:0)
通过sed,
$ sed 's/.*\b11=\([^|]*\).*\b17=\([^\|]*\).*/\1|\2/g' file
ABC|CC
123456|EE
通过grep和paste。
$ grep -oP '\b11=\K[^|]*|\b17=\K[^|]*' file | paste -d'|' - -
ABC|CC
123456|EE
答案 2 :(得分:0)
这是另一个awk
awk -F"11=|17=" '{for (i=2;i<NF;i++) {split($i,a,"|");printf "%s|",a[1]}split($i,a,"|");print a[1]}' file
ABC|CC
123456|EE