Если ваш awk
поддерживает printf
, я бы использовал это вместо этого. Даже если echo -n
не добавляет символ новой строки, awk {print}
добавляет. Вариант printf
не ставит символ новой строки в конце, как print
:
echo -n "${line}" | awk -F '|' '{printf "%s", $1}'
Вот ваша версия в шестнадцатеричном формате, обратите внимание на \n
в конце, когда вы проходите через awk
:
pax> echo -n "hello|goodbye" | od -xcb
0000000 6568 6c6c 7c6f 6f67 646f 7962 0065
h e l l o | g o o d b y e
150 145 154 154 157 174 147 157 157 144 142 171 145
0000015
pax> echo -n "hello|goodbye" | awk -F '|' '{print $1}' | od -xcb
0000000 6568 6c6c 0a6f
h e l l o \n
150 145 154 154 157 012
и вот printf
версия:
pax> echo -n "hello|goodbye" | awk -F '|' '{printf "%s", $1}' | od -xcb
0000000 6568 6c6c 006f
h e l l o
150 145 154 154 157
И вот он работает на вашем реальном файле (в данном примере с именем FILE, чтобы облегчить мое тестирование):
pax> while read line;
do
echo -n "${line}" | awk -F '|' '{printf "%s", $1}';
echo -n " something ";
echo -n "${line}" | awk -F '|' '{printf "%s", $2}';
echo " somethingelse";
done < <(cat FILE)
value1 something value2 somethingelse
value3 something value4 somethingelse