Ответ 1
Вы печатаете результат gsub
, но gsub
выполняет изменение на месте $2
вместо этого, вместо того, чтобы возвращать измененную копию. Вызовите gsub
, затем выполните печать:
awk -F\, '{gsub(/[ \t]+$/, "", $2); print $2 ":"}'
Предположим, что $2 - моя переменная. Я попытался перейти от
awk -F\, '{print $2 ":"}'
to
awk -F\, '{print gsub(/[ \t]+$/, "", $2) ":"}'
Но это печатает что-то, чтобы ничего не печатать.
Вы печатаете результат gsub
, но gsub
выполняет изменение на месте $2
вместо этого, вместо того, чтобы возвращать измененную копию. Вызовите gsub
, затем выполните печать:
awk -F\, '{gsub(/[ \t]+$/, "", $2); print $2 ":"}'
Эти функции полезны для повышения удобочитаемости. Они также возвращают обрезанный результат:
function ltrim(s) { sub(/^[ \t\r\n]+/, "", s); return s }
function rtrim(s) { sub(/[ \t\r\n]+$/, "", s); return s }
function trim(s) { return rtrim(ltrim(s)); }
BEGIN {
# whatever
}
{
# whatever
}
END {
# whatever
}
(У меня недостаточно очков, чтобы прокомментировать предыдущий ответ.)
Чтобы обрезать пробелы на конце $2
, используйте:
awk -F\, '{gsub(/[ \t]+$/, "", $2); print $2 ":"}'
Чтобы обрезать пробелы в начале из $2
, используйте:
awk -F\, '{gsub(/^[ \t]+/, "", $2); print $2 ":"}'
И для конца и для начала:
awk -F\, '{gsub(/^[ \t]+/, "", $2); gsub(/[ \t]+$/, "", $2); print $2 ":"}'
Один лайнер для gawk:
gawk -F\, '{$2 = gensub(/^[ \t]*|[ \t]*$/,"","g",$2)}'
ltrim и rtrim в Unix
awk 'BEGIN{FS=OFS="|"} {gsub(/^[ \t]+|[ \t]+$/, "", $2)}1' filename.txt