ошибка при выполнении команды awk

Вы можете изменить свое исходное местоположение на свой дом, добавив

cd ~/

в ваш ~ / .bashrc

. Вам также может потребоваться проверить, что $ HOME установлен как ваш фактический домашний каталог

export HOME=/home/user_name/
0
07.03.2019, 19:08
2 ответа

Как указывает filbranden GNUawkmawk)требует, чтобы FSбыл правильно установлен перед чтением первой строки, в противном случае он разделит строку по умолчанию. разделитель полей (последовательность пробелов ). Ваш код устанавливаетFSпосле чтения каждой строки, поэтому он будет иметь неправильное значение при обработке первой строки файла.

OpenBSDawk(по крайней мере )ведет себя по-другому и, по-видимому, разделяет текущую запись при доступе к полю, но не раньше. Это означает, что ваш код действительно работает в системе OpenBSD.

Я просто добавлю к этому и скажу, что для извлечения набора столбцов из файла без дальнейшей обработки также полезна команда cut:

$ cut -d '|' -f 2,4 <file
aswani|ap
rani|tel
ramu|vih
2
28.01.2020, 02:18

Вы должны поместить первый блок (установки FS и OFS )внутри блока «НАЧАЛО»:

awk 'BEGIN {FS="|";OFS="|"} {print $2,$4}'

Блок «НАЧАЛО» будет выполняться до обработки первой строки текста. Напротив,блок стенда -в одиночку, который у вас был, будет выполняться на каждой строке текста, но для первой строки установка FS произойдет слишком поздно, так как поля уже будут разделены.

Альтернативой является установка FS с помощью параметра командной строки awk, но вам все равно нужно позаботиться об OFS:

awk -F '|' '{OFS="|"; print $2,$4}'

Или:

awk -F '|' -v OFS='|' '{print $2,$4}'

ОБНОВЛЕНИЕ:Как указал @Kusalananda, некоторые awkреализации (, такие как BSD awk ), будут повторно -разделять поля, если FS будет сброшена, так что эту настройку не нужно происходит в блоке «НАЧАЛО». В GNU awk (, который обычно встречается в дистрибутивах Linux ), этого не происходит, поэтому перед разделением строки необходимо установить FS.

2
28.01.2020, 02:18

Теги

Похожие вопросы