Один из столбцов в моем файле закодирован в url, я должен декодировать этот столбец и выполнить некоторые операции, основанные на значениях внутри столбца. Есть ли способ декодировать этот столбец в awk?URL-декодирование внутри AWK
ответ
Вы должны адаптировать его в зависимости от формата файла, но основной принцип здесь (протестировано с GNU Awk 3.1.7):
sh$ echo 'Hello%2C%20world%20%21' | awk '
{
for (i = 0x20; i < 0x40; ++i) {
repl = sprintf("%c", i);
if ((repl == "&") || (repl == "\\"))
repl = "\\" repl;
gsub(sprintf("%%%02X", i), repl);
gsub(sprintf("%%%02x", i), repl);
}
print
}
'
Hello, world !
Если у вас есть gawk
, вы можете обернуть, что в функция (кредит brendanh in a comment below):
function urlDecode(url) {
for (i = 0x20; i < 0x40; ++i) {
repl = sprintf("%c", i);
if ((repl == "&") || (repl == "\\")) {
repl = "\\" repl;
}
url = gensub(sprintf("%%%02X", i), repl, "g", url);
url = gensub(sprintf("%%%02x", i), repl, "g", url);
}
return url;
}
Моя строка такова: 'http% 3a% 2f% 2fwww.gazelle.com% 2fiphone% 2fiphone-3g' описанная выше операция не может декодировать эту строку .. :( – MikA
Очевидно, что я использовал формат '% 02X ', которые соответствуют URL-адресу, закодированному с помощью знака процента в _uppercase_, например 'http% 3A% 2F ...' Я изменил код примера, чтобы преобразовать кодировку в нижнем регистре. Теперь он должен работать с обоими ... по крайней мере вверх до '% 40' (верхний предел цикла for). Возможно, вам придется отрегулировать это ... –
Моя строка выглядит так: 1370474740 & http% 3a% 2f% 2fwww.xxxx.com% 2fiphone% 2fiphone-3g & et% 3da% 26ago% 3d212% 26ao% 3d219% 26px% 3d73% 26av1% 3d2% 26av2% 3dOrganicSearch & 13456 Когда я использую awk следующим образом: awk 'BEGIN {FS = "&"} {for (i = 0x20; i < 0x40; ++ i) gsub (sprintf ("%% % 02x ", i), sprintf ("% c ", i)); print $ 1, $ 2, $ 3} ' '% 26 ', который' & 'не преобразуется, почему? – MikA
- 1. Переменные Tcl внутри awk (используя awk внутри Tcl)
- 2. печати переменных внутри AWK
- 3. Awk внутри qsub
- 4. Использование grep внутри awk
- 5. AWK если внутри цикл
- 6. Заявление AWK внутри псевдонима git
- 7. Как напечатать переменную внутри AWK
- 8. переменной AWK внутри функции оболочки
- 9. разделитель внутри выражение reqular Awk
- 10. Баш: AWK печать внутри функции
- 11. Как избежать апострофа внутри AWK
- 12. Awk подмена внутри команды находят
- 13. AWK SubRecords (записи внутри записей)
- 14. Недопустимый арифметический оператор внутри Awk
- 15. Как найти файл внутри awk
- 16. определяемые пользователем переменная внутри AWK
- 17. awk выполнить деление внутри файла
- 18. Использование pstree внутри команды AWK
- 19. Вставка, если цикл внутри awk
- 20. Переменная pass в awk внутри командной подстановки
- 21. AWK: матч символов внутри захваченной группы
- 22. Как использовать вывод команды внутри команды awk?
- 23. AWK регулярное выражение и пространство внутри
- 24. BASH GREP И AWK внутри ПЕРЕМЕННОЙ
- 25. Awk не работает внутри perl scipt?
- 26. Как использовать Sed с пробелами внутри AWK
- 27. Кодирование команды awk внутри скрипта perl
- 28. нужно вызвать внешнюю функцию внутри AWK
- 29. TCL глобальные переменные внутри ехес команды AWK
- 30. Если оператор внутри AWK, чтобы изменить значение
этот вопрос не является дубликатом одного упомянутого, название которого является неправильным. –
Это не дубликат. Ответ на этот вопрос решил для меня проблему, а другая - нет. –