Unix 删除字段以使用awk或sed获取值

Unix 删除字段以使用awk或sed获取值,unix,awk,grep,Unix,Awk,Grep,我有一个包含以下数据的文本文件 \ { Name "ABC", count 378 } \ { Name "DEF", count 5283 } \ { Name "BCD",

我有一个包含以下数据的文本文件

            \ {
                Name     "ABC",
                count   378
            }
            \ {
                Name     "DEF",
                count   5283
            }
            \ {
                Name     "BCD",
                count   152244
            }
            \ {
                Name     "XYZ",
                count   5688
            }
            \ {
                Name     "1A2B",
                count   1749132
            }
我想要的结果是:--

我尝试使用以下命令删除非相关数据:--


但我无法超越它。有人能帮我吗?

试试下面的awk,如果这对你有帮助,请告诉我

awk '/Name/{gsub(/\"|\,/,"",$2);val=$2;next} /count/{print val " , " $2}'  Input_file


尝试以下awk,并让我知道这是否有助于你

awk '/Name/{gsub(/\"|\,/,"",$2);val=$2;next} /count/{print val " , " $2}'  Input_file


这里还有一个
awk
你可以申请

$ awk '$2~/[0-9A-Z]/ {printf gsub(/"/,"",$2)?$2:" "$2"\n"}' file
简要说明

  • $2~/[0-9A-Z]/
    :查找与regex匹配的记录
    [0-9A-Z]
  • gsub(/“/,”,$2)
    :删除
    $2
    中的
    ,然后打印它

    • 这里有另一个
      awk
      认为您可以申请

      $ awk '$2~/[0-9A-Z]/ {printf gsub(/"/,"",$2)?$2:" "$2"\n"}' file
      
      简要说明

      • $2~/[0-9A-Z]/
        :查找与regex匹配的记录
        [0-9A-Z]
      • gsub(/“/,”,$2)
        :删除
        $2
        中的
        ,然后打印它

      如果您使用的awk支持正则表达式
      RS
      (至少是gawk和mawk),您可以这样做:

      awk '!(NR%2) { print $3 " , " $5  }' RS='\\ *{|}' FS='[\n," ]+' infile
      
      输出:

      ABC,378
      国防部,5283
      BCD,152244
      XYZ,5688
      1A2B,1749132
      
      如果您使用的awk支持正则表达式
      RS
      (至少是gawk和mawk),您可以这样做:

      awk '!(NR%2) { print $3 " , " $5  }' RS='\\ *{|}' FS='[\n," ]+' infile
      
      输出:

      ABC,378
      国防部,5283
      BCD,152244
      XYZ,5688
      1A2B,1749132
      
      sed解决方案:

      sed -En '/[{}]/d;N; s/Name *"([^"]+)".*count *([0-9]+).*/\1 , \2/p;' file
      
      输出:

              ABC , 378
              DEF , 5283
              BCD , 152244
              XYZ , 5688
              1A2B , 1749132
      
      sed解决方案:

      sed -En '/[{}]/d;N; s/Name *"([^"]+)".*count *([0-9]+).*/\1 , \2/p;' file
      
      输出:

              ABC , 378
              DEF , 5283
              BCD , 152244
              XYZ , 5688
              1A2B , 1749132