Вы можете изменить свое исходное местоположение на свой дом, добавив
cd ~/
в ваш ~ / .bashrc
. Вам также может потребоваться проверить, что $ HOME установлен как ваш фактический домашний каталог
export HOME=/home/user_name/
Как указывает filbranden GNUawk
(иmawk
)требует, чтобы FS
был правильно установлен перед чтением первой строки, в противном случае он разделит строку по умолчанию. разделитель полей (последовательность пробелов ). Ваш код устанавливаетFS
после чтения каждой строки, поэтому он будет иметь неправильное значение при обработке первой строки файла.
OpenBSDawk
(по крайней мере )ведет себя по-другому и, по-видимому, разделяет текущую запись при доступе к полю, но не раньше. Это означает, что ваш код действительно работает в системе OpenBSD.
Я просто добавлю к этому и скажу, что для извлечения набора столбцов из файла без дальнейшей обработки также полезна команда cut
:
$ cut -d '|' -f 2,4 <file
aswani|ap
rani|tel
ramu|vih
Вы должны поместить первый блок (установки 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.