Сканирование всех элементов массива в GAWK возвращает числа вместо значений

StackOverflow https://stackoverflow.com/questions/1015586

  •  06-07-2019
  •  | 
  •  

Вопрос

Учитывая следующую функцию:

function process_pipes(text)
{
    split(text,recs,"|");
    for (field in recs){
        printf ("|%s|\n", field)
    }
}

Если введено: 0987654321 | 57300 | Номер учетной записи ОШИБКИ не найден | GDUMARESQ | 0199 | 9 | N | 0 ||

Почему я получаю цифры ниже вместо текста?

|4|
|5|
|6|
|7|
|8|
|9|
|10|
|1|
|2|
|3|
Это было полезно?

Решение

split создает в вашем коде массив recs и recs [1] == 0987654321 и т. д.

Цикл for (поле в recs) генерирует список индексов, а не элементов массива.

Следовательно, вам нужно:

function process_pipes(text)
{
    split(text,recs,"|");
    for (field in recs){
        printf ("|%s|\n", recs[field])
    }
}

Другие советы

Потому что

for ... in 

дает вам ключи . Используйте

printf("|%s|\n",recs[field]);

чтобы получить значения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top