从流中隔离类似数据

时间:2018-06-25 11:38:56

标签: awk sed grep

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

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 个答案:

答案 0 :(得分:0)

能否请您尝试以下操作,如果有帮助,请告诉我。

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

答案 1 :(得分:0)

假设您具有GNU grep:

command_to_produce_data | grep -oP '(?<=[|])REF_DATA.+?(?=[|])' | sort -u

答案 2 :(得分:0)

这可能对您有用(GNU sed和sort):

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

用换行符括住预期的字符串,仅在单独的行上打印这些字符串,并对仅显示唯一值的行进行排序。

答案 3 :(得分:0)

awk -F\| '{print $4}' file
REF_DATA^1^Y^
REF_DATA_IND^1^B^