Необходимо извлечь значение из файла HL7 с помощью awk - PullRequest
0 голосов
/ 05 декабря 2018

В программе-скрипте Linux у меня есть следующая команда awk для других целей и для переименования файла.

      cat $edifile | awk -F\| '
        { OFS = "|"
          print $0
        } ' | tr -d "\012" > $newname.hl7

Пока это происходит, я бы хотел взять 5-е полесегмент MSH и сохраните его для последующего использования в сценарии.Это возможно?Если нет, как я могу сделать это позже или раньше?Пример сегмента.

MSH | ^ ~ \ & | business1 | business1 | business2 | /u/tmp/TR0049-GE-1.b64 | маршрутизация | 201811302126 || ORU ^ R01 | 20181130212105810 | D | 2.3

Что я хочу сделать, это получить путь и имя файла в MSH 5 и объединить его до конца нового файла.

Я использовал это для захвата данных, но не повезло.Если fpth устанавливается, доказательств этого нет, и у меня нет правильного синтаксиса для эха в фразе awk.

      cat $edifile | awk -F\| '
        { OFS = "|"
          {fpth=$(5)}
          print $0
        } ' | tr -d "\012" > $newname.hl7

есть предложения?Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Прежде всего, следует отметить, что строка awk в вашем первом фрагменте кода имеет нулевое использование:

$ cat $edifile | awk -F\| ' { OFS = "|"; print $0 }' | tr -d "\012" > $newname.hl7

Это полностью эквивалентно

$ cat $edifile | tr -d "\012" > $newname.hl7

потому что OFS используется только для переопределения $0, если вы переопределяете поле.

Пример:

$ echo "a|b|c" | awk -F\| '{OFS="/"; print $0}'
a|b|c
$ echo "a|b|c" | awk -F\| '{OFS="/"; $1=$1; print $0}'
a/b/c

Я понимаю, что у вас есть файл hl7, в котором у вас естьодна строка, начинающаяся со строки "MSH".В этой строке вы хотите сохранить 5-е поле: это достигается следующим образом:

fpth=$(awk -v outputfile="${newname}.hl7" '
             BEGIN{FS="|"; ORS="" }
             ($1 == "MSH"){ print $5 }
             { print $0 > outputfile }' $edifile)

Я заменил ORS на пустой набор символов, так как он эквивалентен tr -d "\012".Вышеописанное будет работать очень хорошо, если в вашем файле только один MSH.

0 голосов
/ 06 декабря 2018

Попробуйте

filename=`awk -F'|' '{print $5}' $edifile | head -1`

Вы можете пропустить трубопровод через head , если файл состоит из одной строки

...