Заполнение пробелов в первом столбце CSV-файла с помощью Bash/awk

Согласно документации Ubuntu 18.04 под названием:Перемещение окна в другое рабочее пространство:

  • Супер + Сдвиг + Страница вверх
  • Супер + Shift + Страница вниз

0
31.07.2020, 14:20
4 ответа

Использовать Миллера(https://github.com/johnkerl/miller)очень просто. Бег

mlr --csv fill-down -f CODE input.csv >output.csv

у вас будет

+------------+----------------+-----+-----+-----+-----+-----+-----+-----+--------+
| CODE       | Sitting        | Jan | Feb | Mar | Apr | May | Jun | Jul | Totals |
+------------+----------------+-----+-----+-----+-----+-----+-----+-----+--------+
| CLLK_J9    | First Sitting  | -   | -   | 2   | 5   | 2   | -   | -   | 10     |
| CLLK_J9    | Second Sitting | -   | -   | -   | -   | -   | -   | -   | 1      |
| RTHM_A8    | First Sitting  | -   | -   | 1   | -   | 3   | -   | -   | 6      |
| RTHM_A8    | Second Sitting | -   | -   | -   | -   | 1   | -   | -   | 1      |
| FFBJ_FA9   | First Sitting  | -   | -   | -   | 8   | 6   | -   | -   | 25     |
| FFBJ_FA9   | Second Sitting | -   | -   | -   | -   | 11  | -   | -   | 12     |
| UUYIOR_HJ9 | First Sitting  | -   | -   | 1   | 3   | 6   | -   | -   | 17     |
| IKRO_Lk8   | First Sitting  | -   | -   | -   | 3   | 3   | -   | -   | 37     |
| IKRO_Lk8   | Second Sitting | -   | -   | -   | 6   | 11  | -   | -   | 34     |
+------------+----------------+-----+-----+-----+-----+-----+-----+-----+--------+
5
18.03.2021, 23:16

Не решение AWK, но...

$ cat yourfile.csv | csv-sqlite 'select code, (select i2.code from input i2 where i2.code != "" and i2.rowid <= i1.rowid order by i2.rowid desc limit 1) as new_CODE, Sitting, Jan, Feb, Mar, Apr, May, Jun, Jul, Totals from input i1' -s
CODE         new_CODE     Sitting          Jan   Feb   Mar   Apr   May   Jun   Jul   Totals
CLLK_J9      CLLK_J9      First Sitting                2     5     2                 10
             CLLK_J9      Second Sitting                                             1
RTHM_A8      RTHM_A8      First Sitting                1           3                 6
             RTHM_A8      Second Sitting                           1                 1
FFBJ_FA9     FFBJ_FA9     First Sitting                      8     6                 25
             FFBJ_FA9     Second Sitting                           11                12
UUYIOR_HJ9   UUYIOR_HJ9   First Sitting                1     3     6                 17
IKRO_Lk8     IKRO_Lk8     First Sitting                      3     3                 37
             IKRO_Lk8     Second Sitting                     6     11                34

(если вы отбросите " -s", он вернется как CSV)

csv -sqlite происходит отhttps://github.com/mslusarz/csv-nix-tools

Запрос был украден из этого ответа .

1
18.03.2021, 23:16

Если вы хотите попробовать это с awk, следующее должно работать:

awk -F',' -v OFS=',' 'FNR>1{if ($1!="") last=$1; else $1=last}1' input.csv

Это установит разделители полей ввода и вывода на ,.

Затем для каждой строки после первой строки(FNR>1)будет проверяться, не пуст ли первый столбец ($1). Если это не так, значение будет сохранено в переменной lastдля последующего использования. Если он пуст, он будет заполнен ранее сохраненным значением.

1вне блока правил {... }дает указание awkраспечатать текущую строку, включая все сделанные модификации. Обратите внимание, что если не указана эта команда (или фактически какое-либо логическое условие, вычисляющее значение true), или явная команда print/ printfне задана внутри блока правил, awkне будет печатать текущую строку.

Результат:

CODE,Sitting,Jan,Feb,Mar,Apr,May,Jun,Jul,Totals
CLLK_J9,First Sitting,,,2,5,2,,,10
CLLK_J9,Second Sitting,,,,,,,,1
RTHM_A8,First Sitting,,,1,,3,,,6
RTHM_A8,Second Sitting,,,,,1,,,1
FFBJ_FA9,First Sitting,,,,8,6,,,25
FFBJ_FA9,Second Sitting,,,,,11,,,12
UUYIOR_HJ9,First Sitting,,,1,3,6,,,17
IKRO_Lk8,First Sitting,,,,3,3,,,37
IKRO_Lk8,Second Sitting,,,,6,11,,,34
2
18.03.2021, 23:16

Использование любого awk в любой оболочке на каждом компьютере UNIX:

$ awk 'BEGIN{FS=OFS=","} $1==""{$1=p} {p=$1} 1' file
CODE,Sitting,Jan,Feb,Mar,Apr,May,Jun,Jul,Totals
CLLK_J9,First Sitting,,,2,5,2,,,10
CLLK_J9,Second Sitting,,,,,,,,1
RTHM_A8,First Sitting,,,1,,3,,,6
RTHM_A8,Second Sitting,,,,,1,,,1
FFBJ_FA9,First Sitting,,,,8,6,,,25
FFBJ_FA9,Second Sitting,,,,,11,,,12
UUYIOR_HJ9,First Sitting,,,1,3,6,,,17
IKRO_Lk8,First Sitting,,,,3,3,,,37
IKRO_Lk8,Second Sitting,,,,6,11,,,34
1
18.03.2021, 23:16

Теги

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