Прежде всего, следует отметить, что строка 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.