Awk 从流中隔离相似的数据

Awk 从流中隔离相似的数据,awk,sed,grep,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实现这一点-使用一行脚本。请尝试以下内容,并让我知道这是否对您有帮助

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

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实现这一点-使用一行脚本。

请尝试以下内容,并让我知道这是否对您有帮助

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

假设您拥有GNU grep:

command_to_produce_data | grep -oP '(?<=[|])REF_DATA.+?(?=[|])' | sort -u
命令生成数据| grep-oP'(?这可能适合您(GNU-sed&sort):


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

使用正则表达式依赖于
REF\ucode>子字符串添加您尝试过的内容。.如果总是第4列,则始终可以将该列分离出来,然后应用sort+uniq或单独使用awk(如果要保留或删除)DerSundeep说了什么。你已经用awk、sed和grep标记了你的问题,所以我希望在你的问题中看到使用awk、sed和grep的例子或尝试。如果你自己没有做过任何工作,没有尝试找出解决方案,那么这不是适合你的问题的论坛。很好的解决方案,但我相信它不会涵盖其中的独特部分e、 您也可以通过管道将其排序或唯一。
awk -F\| '{print $4}' file
REF_DATA^1^Y^
REF_DATA_IND^1^B^
awk -F\| '{print $4}' file
REF_DATA^1^Y^
REF_DATA_IND^1^B^