2016-06-26 10 views
2

У меня есть образец CSV файл с именем RecordCountTest.csv который выглядит следующим образом:Bash скрипт для добавления/вставки Timestamp в CSV

Date   Time   Shift   Record 
26-06-2016 15:23:01  Shift2  000002 
23-06-2016 09:06:24  Shift1  000001 

Когда штифт кнопки GPIO проводная нажимается команду Баш скрипт запускается. Мне нужен простой скрипт AWK или Bash, который я могу вызвать после запуска команды, которая может документировать, что это произошло и отслеживать когда. Я хотел бы сделать это, вставив строку вверху (но под заголовком) с текущей датой (DD-MM-YYYY), текущее время (HH: MM: SS), сдвиг - это переменная, определяемая bash (и я отправлю этот вопрос через 90 минут, если я не смогу это выяснить до этого), а затем увеличьте запись на единицу и сохраните файл как RecordCountTest.CSV. Я бы предпочел SED, если это возможно, так как это то, что я пытаюсь изучить в настоящее время, и любые предложения, которые могут помочь мне понять синтаксис больше, но будут принимать все, что может работать в этом сценарии bash, включая AWK.

ответ

2

awk на помощь!

$ gawk -v OFS="\t" -v s="${shift}" 'NR==2{print strftime("%d-%m-%Y"), 
               strftime("%H:%M:%S"), 
               s, 
               sprintf("%06d",$4+1)} 
             {$1=$1}1' file > temp && mv temp file 

если ваш awk не поддерживает STRFTIME функцию, вы можете вернуться к bash

$ awk -v OFS="\t" -v s="${shift}" 
        -v d="$(date +"%d-%m-%Y"$'\t'"%H:%M:%S")" 
      'NR==2{print d, s, sprintf("%06d",$4+1)} 
       {$1=$1}1' file > temp && mv temp file 
+0

я только разместил два вопроса на этот сайт, и вы ответили их обоих решений AWK Karakfa! Я буду тестировать, и я думаю, что я, вероятно, должен потратить больше времени на изучение AWK, чем SED, с тем, как это происходит. Спасибо вам за быстрый ответ. :) Будьте на связи! В последней строке два экземпляра «файла» должны быть заменены на RecordCountTest.csv, правильно? –

+0

все, что связано с математикой и более чем замена текста 'awk' превосходит. «file» - это входной файл, результат записывается в файл temp, который затем перезаписывает исходный вход. Если возможны одновременные обновления, может потребоваться решение с блокировкой или аналогичным. – karakfa

+0

Я положил его в скрипт bash и ничего не написал файл. Файл содержит только существующие данные. Сценарий выглядел так: #!/Bin/bash sudo awk -v OFS = "\ t" -vs = "$ {shift}" 'NR == 2 {print strftime ("% d-% m- % Y "), strftime ("% H:% M:% S "), s, sprintf ("% 06d ", $ 4 + 1)} {$ 1 = $ 1} 1 '/ home/pi/RecordCountTest .csv $ –