Подтвердить что ты не робот

Как я могу обрезать пробел из переменной в awk?

Предположим, что $2 - моя переменная. Я попытался перейти от

awk -F\, '{print $2 ":"}'

to

awk -F\, '{print gsub(/[ \t]+$/, "", $2) ":"}'

Но это печатает что-то, чтобы ничего не печатать.

4b9b3361

Ответ 1

Вы печатаете результат gsub, но gsub выполняет изменение на месте $2 вместо этого, вместо того, чтобы возвращать измененную копию. Вызовите gsub, затем выполните печать:

awk -F\, '{gsub(/[ \t]+$/, "", $2); print $2 ":"}'

Ответ 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
} 

Источник: https://gist.github.com/andrewrcollins/1592991

Ответ 3

(У меня недостаточно очков, чтобы прокомментировать предыдущий ответ.)

Чтобы обрезать пробелы на конце $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 ":"}'

Ответ 4

Один лайнер для gawk:

gawk -F\, '{$2 = gensub(/^[ \t]*|[ \t]*$/,"","g",$2)}'

Ответ 5

ltrim и rtrim в Unix

awk 'BEGIN{FS=OFS="|"} {gsub(/^[ \t]+|[ \t]+$/, "", $2)}1' filename.txt