awk - 使用 awk 提取多个字符串

标签 awk match

我试图从每一行中提取两个字符串,有些行没有任何一个字符串,有些行只有一个字符串。

我的输入input.txt:

ID=MD001;refer=init;loc=tap2
ID=MD002;Name=Jam;refer=init;loc=tap2
ID=MD003;Name=Jane;Value=vip;refer=init;loc=tap2
ID=MD008;Name=George;product=car;vall=some;Value=vim;refer=init;loc=tap2
ID=MD0010;product=cars;Value=vip4;refer=init;loc=tap2
ID=MD0018;product=cars;
...

我想匹配字符串“Name”或/和“Value”,并将它们输出为:

ID=MD002 Name=Jam
ID=MD003 Name=Jane Value=vip
ID=MD008 Name=George Value=vim
ID=MD0010 Value=vip4

我尝试过:

head 输入.txt | awk '$1 ~/Name|Value/{match($1,/(ID=*);.*(Name*);.*(Value.*)/, name);打印名称[1]名称[2]名称[3]}'

但它确实打印了任何东西。 感谢您的帮助。

最佳答案

您可以尝试关注吗?

awk '
BEGIN{
  FS=";"
}  
  {
  for(i=2;i<=NF;i++){
    if($i~/^Name|^Value/){
      val=(val?val OFS:"")$i
    }
  }
  if(val){
    print $1,val;
  }
  val=""
}
'  Input_file

所示示例的输出如下。

ID=MD002 Name=Jam
ID=MD003 Name=Jane Value=vip
ID=MD008 Name=George Value=vim
ID=MD0010 Value=vip4

关于awk - 使用 awk 提取多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60152628/

相关文章:

regex - 如何在正则表达式中定义空格(在 awk 中)?

MYSQL 在匹配时删除 UPDATE 中的行

mysql - 寻找相似的用户

shell - awk 退出 ACTION 路径并直接进入 END 部分

linux - 使用 bash、awk 或 sed 将 CSV 文件模板化为 SQL 文件

r - 匹配不同长度的向量列表

Python:列表和字符串匹配

string - 在基本工作区中查找具有部分字符串匹配的变量(Matlab)

linux - If/then 语句与 awk

bash - bash 中的 awk 和 printf