代码之家  ›  专栏  ›  技术社区  ›  IUnknown

从流中分离相似的数据

  •  -2
  • IUnknown  · 技术社区  · 8 年前

    我们分析以下格式的数据-

    35953539535393  BG  |..|...|REF_DATA^1^Y^|...|...| 
    35953539535393  B  |..|...|REF_DATA_IND^1^B^|...|...| 
    

    我们需要使用脚本打印文件中出现的ref_data*的唯一值。 因此,上述数据的输出为:

    REF_DATA^1^Y^
    REF_DATA_IND^1^B^
    

    我们如何使用grep、sed或awk实现这一点-使用一行脚本。

    4 回复  |  直到 8 年前
        1
  •  0
  •   potong    8 年前

    这可能对您有用(gnu sed&sort):

    sed '/\n/!s/[^|]*REF_DATA[^|]*/\n&\n/;/^[^|]*REF_DATA/P;D' file | sort -u
    

    用换行符包围指定的字符串,只在单独的行上打印这些字符串,并对那些只显示唯一值的行进行排序。

        2
  •  0
  •   RavinderSingh13 Nikita Bakshi    8 年前

    你能试着跟我说一下吗,如果这对你有帮助的话。

    awk 'match($0,/REF_DATA[^|]*/){val=substr($0,RSTART,RLENGTH);if(!array[val]++){print val}}'  Input_file
    

    现在也添加了一个非线性的解决方案。

    awk '
    match($0,/REF_DATA[^|]*/){
      val=substr($0,RSTART,RLENGTH);
      if(!array[val]++){
        print val
      }
    }'  Input_file
    
        3
  •  0
  •   glenn jackman    8 年前

    假设你有GNU GREP:

    command_to_produce_data | grep -oP '(?<=[|])REF_DATA.+?(?=[|])' | sort -u
    
        4
  •  0
  •   Claes Wikner    8 年前
    awk -F\| '{print $4}' file
    REF_DATA^1^Y^
    REF_DATA_IND^1^B^