Удаление выбора столбца в AWK

Я хотел бы удалить выбор столбцов из списка файлов CSV. Вызов awk является встроенным, так как он используется в сценарии оболочки. Я не знаю заранее, сколько столбцов у файлов, только то, что столбцы, которые я хочу удалить, включены в каждый файл списка.

Допустим, я хочу удалить первые 4 столбца. Вычистка значений столбца оставит разделители, которые я также хочу удалить.

Я думал, что сработало бы следующее: создать массив номеров столбцов для удаления и воссоздать соответствующую строку без этих столбцов.

Приведенное ниже значение длины (строки) соответствует ожидаемому, но последний цикл все еще выполняет итерацию по исходному количеству столбцов, а не по фактическому значению длины (строки).

голова $ f | awk 'BEGIN {FS = ","; split ("1,2,3,4", dropers, ",")} {split ($ 0, row, FS); для (i в dropers) удалить строку [i] ; print NF "," length (row) "<<<"; out = ""; print NF "," length (row) ">>>"; for (i = 1; i <= length (row); i ++) {print row [i] "lulu"; out = out "," row [i]}; sub (/ [\ t] * $ /, "", out); распечатать} '> $ g

или отформатированный:

head $f | awk 'BEGIN{FS=",";split("1,2,3,4",dropers,",")}{split($0,row,FS);for(i in dropers) delete row[i]; print NF "," length(row) "<<<";out=""; print NF "," length(row) ">>>";for(i=1;i<=length(row);i++){print row[i] "lulu"; out = out "," row[i]}; sub(/[ \t]*$/,"",out);print out}'  > $g

Вот вывод для 2 файлов: идет 6 столбцов, 2 осталось, когда я удалил столбцы с 1 по 4, но цикл перебирает все 6 столбцов, а не ожидаемый 2. Спасибо за любой совет.

Aust.

6,2<<<
6,2>>>
lulu
lulu
lulu
lulu
0000009lulu
461474lulu
,,,,,0000009,461474
6,2<<<
6,2>>>
lulu
lulu
lulu
lulu
0000010lulu
94942lulu
,,,,,0000010,94942

редактировать (Велизарий)
Форматированный код выглядит следующим образом:

BEGIN {FS=",";
       split("1,2,3,4",dropers,",")
      }

{ split($0,row,FS);
  for(i in dropers) delete row[i]; 
  print NF "," length(row) "<<<";
  out=""; 
  print NF "," length(row) ">>>";
  for(i=1;i<=length(row);i++){print row[i] "lulu"; 
                              out = out "," row[i]}; 
  sub(/[ \t]*$/,"",out);
  print out
}

Ответы на вопрос(1)

Ваш ответ на вопрос