Удаление полей CSV без значений для больших файлов

В документе здесь -, который вы передаете в sqlplus, либо экранируйте $, так как\$(непонятно, почему вы говорите, что не можете сделать это в вопросе ), либо цитируйте весь здесь -документ, используя <<'ENDSQL'или<<\ENDSQL(это может быть предпочтительнее, если у вас нет ничего другого в здесь -документе, который требует расширения ).

Кроме того, строка Passwo$1должна быть заключена в одинарные кавычки в документе здесь -. Поскольку документ является сценарием оболочки, строка по-прежнему должна быть защищена от оболочки, которая ее интерпретирует. Вы делаете это, записывая это как 'Passwo$1'.

0
07.02.2020, 22:36
1 ответ

Посмотрите, как далеко это вас заведет:

$ cut --complement -d, -f$(awk -F, '
NR > 1  {for (i=1; i<=NF; i++)  CNT[i, $i]++
        }
END     {for (c in CNT) if (CNT[c] == (NR-1))   {split (c, T, SUBSEP)
                                                 printf "%s%d", DL, T[1]
                                                 DL = ","
                                                }
        }
' /tmp/small_data.csv)  /tmp/small_data.csv

, если ваша версия cutимеет опцию --complement. В противном случае инвертируйте логику распечатки. Если ваш awkпроигрывает NRв разделе END, сохраните его в обработке по -строке -.

Он просматривает все поля во всех строках (, кроме заголовка ), и подсчитывает уникальное содержимое. В разделе END, если CNTравно количеству строк минус заголовок (, то есть это поле имеет одинаковое содержимое во всех строках ), разделите индекс и напечатайте номер поля.

0
28.04.2021, 23:24

Теги

Похожие вопросы