echo "field one has spaces | field two has spaces" \
| awk '
BEGIN {
FS="|"
}
{
print $2
print $1
# or what ever you want
}'
#output
field two has spaces
field one has spaces
Вы также можете уменьшить это до
awk -F'|' {
print $2
print $1
}'
Редактировать
Кроме того, не все awks могут принимать многосимвольное регулярное выражение для значения FS
.
Edit2
Каким-то образом я пропустил это изначально, но вижу, что вы пытаетесь включить \x00
в классы char до и после символа |
. Я полагаю, вы имеете в виду для \x00
== null
char? Я не думаю, что вы сможете awk
проанализировать файл со встроенными нулевыми символами. Вы можете подготовить свой ввод как
tr '\x00' ' ' < file.txt > spacesForNulls.txt
ИЛИ удалить их вместе с
tr -d '\x00' < file.txt > deletedNulls.txt
и уберите эту часть вашего регулярного выражения. Но, как указано выше, некоторые awk
не поддерживают регулярное выражение для значения FS
. И я не очень часто использую трюк tr
, вы можете обнаружить, что для символа null
требуется немного другое обозначение, в зависимости от вашей версии tr
.
Надеюсь, это поможет.