изолировать похожие данные от потока - PullRequest
0 голосов
/ 25 июня 2018

Мы анализируем данные следующего формата -

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 голосов
/ 26 июня 2018
awk -F\| '{print $4}' file
REF_DATA^1^Y^
REF_DATA_IND^1^B^
0 голосов
/ 25 июня 2018

Если у вас есть GNU grep:

command_to_produce_data | grep -oP '(?<=[|])REF_DATA.+?(?=[|])' | sort -u
0 голосов
/ 26 июня 2018

Это может сработать для вас (GNU sed & sort):

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

Окружите предполагаемые строки новыми строками, печатайте только эти строки в отдельных строках и сортируйте эти строки, показывая только уникальные значения.

0 голосов
/ 25 июня 2018

Не могли бы вы попробовать и дайте мне знать, если это вам поможет.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...