Разделите столбец даты в csv файле на MM/YYYY и столбец времени отдельно и запишите на тот же csv

Я не знаю, что происходит с вашим файловая система монтируется, но обойти это очень просто. Вам просто нужно понять, что на самом деле делает шебанг.

Когда файл помечен как исполняемый и вы пытаетесь запустить его, проверяются первые два байта файла. Если они #! , то оболочка выполнит эту первую строку вашего файла как команду, за которой следует путь к самому файлу в качестве аргумента этой команды.

Другими словами, #! / Bin / bash , помещенный в качестве первой строки в файл с именем /tmp/myscript.sh , будет выполняться как / bin / bash /tmp/myscript.sh .

Аналогично, #! / Usr / bin / awk -f как первая строка ./ awkTest.awk при запуске становится (или должен стать, если проблема с монтированием не мешала) / usr / bin / awk -f ./awkTest.awk.

Решение состоит в том, чтобы просто запустить awk -f awkTest.awk , и ваш сценарий будет работать должным образом.


Обратите внимание, что поскольку awk интерпретируется , а не компилируется, флаг noexec в параметрах монтирования устройства, на котором хранится ваш сценарий awk , выиграл 't не мешает вам запустить ваш скрипт. Это только мешает вам запустить его как исполняемый файл . Итак, все, что вам нужно сделать, это запустить двоичный исполняемый файл awk ( / usr / bin / awk ), и он прочитает ваш awk script, что, конечно, не предотвращается флагом noexec , и он будет делать то, что вы написали.

0
14.09.2018, 18:43
2 ответа

RudiC показывает, как преобразовать файл. Чтобы сохранить его обратно в тот же файл:

  1. с помощью GNU awk:

    gawk -i inplace '...' file
    
  2. используяspongeиз пакета moreutils:

    awk '...' file | sponge file    
    
  3. Или с помощью временного файла

    tmp=$(mktemp)
    awk '...' file > "$tmp" && mv "$tmp" file
    
0
28.01.2020, 02:42

Как насчет

awk -F"\t" '
NR == 1         {$2 = "datetime" OFS "monthyear" OFS "time"
                }
NR > 1          {split ($2, T, "[/ ]")
                 $2 = $2 OFS T[1] "/" T[3] OFS T[4]
                }
1
' OFS="\t" file
id  datetime    monthyear   time    userId  itemId
1   12/1/17 8:32    12/17   8:32    2232    tv
2   1/12/18 10:18   1/18    10:18   3232    fdfs
3   2/9/18 10:50    2/18    10:50   232 fdsf
4   3/6/18 12:35    3/18    12:35   345456  fdg
1
28.01.2020, 02:42

Теги

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