CMD/BAT - unix epoch. переформатирование даты в нормальную в текстовом файле

Ответить
Аватара пользователя
shmel_sv@vk

CMD/BAT - unix epoch. переформатирование даты в нормальную в текстовом файле

Сообщение shmel_sv@vk »

доброго времени суток. мой любимый раздел на этом форуме

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

формат такой

1183557532 (знак табуляции) инфо-инфо453535



надо чтоб выглядело так

2014-04-01 (знак табуляции) инфо-инфо453535



тоесть нужна сама дата (без часов, минут и секунд)
Аватара пользователя
shmel_sv@vk

Re: CMD/BAT - unix epoch. переформатирование даты в нормальную в текстовом файле

Сообщение shmel_sv@vk »

хехе

нашел сам решение но еще не опробЫвал..отпишусь позже...пока цытата с другого сайта





awk is better for these stuff, if acceptable:

awk -F, '{x=$1;sub(/.*=/,"",$1);sub(/=.*/,strftime("=%Y-%m-%d %H:%M:%S",$1),x);$1=x;}1' OFS=, file



A sample result:

$ cat file

timestamp=1356431101, entity=xxx, event: xxxxxx

timestamp=1354770380, entity=xxx, event: xxxxxx



On running the command:

$ awk -F, '{x=$1;sub(/.*=/,"",$1);sub(/=.*/,strftime("=%Y-%m-%d %H:%M:%S",$1),x);$1=x;}1' OFS=, file

timestamp=2012-12-25 15:55:01, entity=xxx, event: xxxxxx

timestamp=2012-12-06 10:36:20, entity=xxx, event: xxxxxx



The first sub command extracts the timestamp. The second using the strftime replaces the timestamp with the date and time. 1 is used to print every line.
Аватара пользователя
shmel_sv@vk

Re: CMD/BAT - unix epoch. переформатирование даты в нормальную в текстовом файле

Сообщение shmel_sv@vk »

парни помогите. ничего не получается... c авк никогда не сталкивался

в батнике такой текст

$ awk -F, "{x=$1;sub(/.*=/,"",$1);sub(/=.*/,strftime("=%Y-%m-%d %H:%M:%S",$1),x);$1=x;}1" OFS=, file 1.txt>2.txt
Аватара пользователя
shmel_sv@vk

Re: CMD/BAT - unix epoch. переформатирование даты в нормальную в текстовом файле

Сообщение shmel_sv@vk »

shmel_sv@vk, Вариант на PowerShell, хоть и оффтоп:



Код:

Код: Выделить всё

gc 1.txt | % { 
    $timestamp = $_.split('')[0]
    $data = $_ -replace "$timestamp",''
    $date = ([datetime]'01.01.1970').addseconds($timestamp).tostring('yyyy-MM-dd')
    add-content 1.tmp $date$data
}
move-item 1.tmp 1.txt -force

Как будет работать на больших файлах не знаю.
Аватара пользователя
shmel_sv@vk

Re: CMD/BAT - unix epoch. переформатирование даты в нормальную в текстовом файле

Сообщение shmel_sv@vk »

большое спасибо!!!

а как в повершел сделать точно так же но наоборот?

из обычного в юникс

формат - 2014-03-09 23-00
Аватара пользователя
shmel_sv@vk

Re: CMD/BAT - unix epoch. переформатирование даты в нормальную в текстовом файле

Сообщение shmel_sv@vk »

Цитата shmel_sv@vk:



2014-03-09 23-00
CMD/BAT - unix epoch. переформатирование даты в нормальную в текстовом файле






Код:

Код: Выделить всё

$a = [datetime]::parseexact('2014-03-09 23-00','yyyy-MM-dd HH-mm',$null)
$unixtime = (new-timespan '01.01.1970' $a).totalseconds
$unixtime
Аватара пользователя
Foreigner

Re: CMD/BAT - unix epoch. переформатирование даты в нормальную в текстовом файле

Сообщение Foreigner »

shmel_sv@vk, По поводу больших файлов такая конструкция:



Код:

Код: Выделить всё

$reader = [io.file]::opentext("C:\Files\1.txt")
$writer = new-object io.streamwriter("C:\Files\1.tmp")
while ( $reader.peek() -ge 0 ) { 
    $line = $reader.readline()
    $timestamp = $line.split('')[0]
    $data = $line -replace "$timestamp",''
    $date = ([datetime]'01.01.1970').addseconds($timestamp).tostring('yyyy-MM-dd')
    $writer.writeline("$date$data")
}
$reader.close()
$writer.close()

Один минус, и как побороть не могу собразить, выходной файл 1.tmp получается в кодировке UTF-8. Попробуйте на большом файле.
Аватара пользователя
shmel_sv@vk

Re: CMD/BAT - unix epoch. переформатирование даты в нормальную в текстовом файле

Сообщение shmel_sv@vk »

Цитата Foreigner:



$a = [datetime]::parseexact('2014-03-09 23-00','yyyy-MM-dd HH-mm',$null)

$unixtime = (new-timespan '01.01.1970' $a).totalseconds

$unixtime
CMD/BAT - unix epoch. переформатирование даты в нормальную в текстовом файле




c повершел никогда не сталкивался....не пойму куда ввод файла а куда вывод

это он будет только на ту дату реагировать?

я вот еще одно решение нашел....но опять таки не пойму где ввлд где вывод


Цитата:



$unixEpochStart = new-object DateTime 1970,1,1,0,0,0,([DateTimeKind]::Utc)

[int]([DateTime]::UtcNow - $unixEpochStart).TotalSeconds
Аватара пользователя
Foreigner

Re: CMD/BAT - unix epoch. переформатирование даты в нормальную в текстовом файле

Сообщение Foreigner »

shmel_sv@vk, пример файла нужен, его же надо обработать.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»