«Текущее время» выводится как ноль - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь ввести значение file2 из file1, чтобы каждая строка в file2 была первым полем каждой строки file1, за которым следовал пробел и текущее время.

Например,

IN-X_4096_20140802_121306_007 `random text`
IN-X_4096_20140802_133431_012 `random text`
IN-A_6046_20130613_165426 `random text`
IN-A_6046_20130613_165426 `random text`
IN-X_4096_20140802_133431_014 `random text`

становится

IN-X_4096_20140802_121306_007 14:24:32
IN-X_4096_20140802_133431_012 14:24:32
IN-A_6046_20130613_165426 14:24:32
IN-A_6046_20130613_165426 14:24:32
IN-X_4096_20140802_133431_014 14:24:32

Но я получаю

IN-X_4096_20140802_121306_007 0
IN-X_4096_20140802_133431_012 0
IN-A_6046_20130613_165426 0
IN-A_6046_20130613_165426 0
IN-X_4096_20140802_133431_014 0

Код, который я использую:

awk '{b=$1" "date +"%r"; print b >"file2.csv" }' file1.csv

То же самое происходит, когда я использую "% T"

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Из вашего вопроса не ясно, какое поведение вы ожидаете, но вот два решения Gnu awk:

  1. Вычисленная строка даты-времени должна быть постоянной в течение всего циклакоманды:

    awk 'BEGIN{t=strftime("%r")}{ print $1,t }' file1.csv > file2.csv 
    
  2. Вычисляемая строка даты и времени должна быть обновлена ​​для каждой строки:

    awk '{ print $1,strftime("%r") }' file1.csv > file2.csv
    
0 голосов
/ 17 октября 2018

Написано так, date интерпретируется как имя переменной.Поскольку он не установлен, он оценивается в "" или 0 в зависимости от контекста.Оператор + после того, как он означает, что он вычисляется в арифметическом контексте, поэтому он принимает значение 0.

Чтобы передать значение date +%r в сценарий awk, используйте любой из этих подходов.:

# the time when the script was run, doesn't change
awk -v time="$(date +%r)" '{ print time }' file1.csv

# the time when each record is read
awk '{ cmd = "date +%r"; cmd | getline time; print time; close(cmd) }' file1.csv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...