Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - unix epoch. переформатирование даты в нормальную в текстовом файле

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

Пользователь


Сообщения: 57
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


доброго времени суток. мой любимый раздел на этом форуме
не знаю как решить такую проблему. как перевести юникс время в обычное с помощью ексель я знаю. но мой файл содержит более миллиона строк
формат такой
1183557532 (знак табуляции) инфо-инфо453535

надо чтоб выглядело так
2014-04-01 (знак табуляции) инфо-инфо453535

тоесть нужна сама дата (без часов, минут и секунд)

Отправлено: 00:22, 11-04-2014

 

Пользователь


Сообщения: 57
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


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


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.

Отправлено: 00:30, 11-04-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Пользователь


Сообщения: 57
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


парни помогите. ничего не получается... 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, 13-04-2014 в 22:07.


Отправлено: 21:58, 13-04-2014 | #3


Ветеран


Сообщения: 1759
Благодарности: 966

Профиль | Цитировать


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
Как будет работать на больших файлах не знаю.

Последний раз редактировалось Foreigner, 13-04-2014 в 23:24.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:38, 13-04-2014 | #4


Пользователь


Сообщения: 57
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


большое спасибо!!!
а как в повершел сделать точно так же но наоборот?
из обычного в юникс
формат - 2014-03-09 23-00

Отправлено: 03:06, 14-04-2014 | #5


Ветеран


Сообщения: 1759
Благодарности: 966

Профиль | Цитировать


Цитата shmel_sv@vk:
2014-03-09 23-00 »
Код: Выделить весь код
$a = [datetime]::parseexact('2014-03-09 23-00','yyyy-MM-dd HH-mm',$null)
$unixtime = (new-timespan '01.01.1970' $a).totalseconds
$unixtime
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:14, 14-04-2014 | #6


Ветеран


Сообщения: 1759
Благодарности: 966

Профиль | Цитировать


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. Попробуйте на большом файле.

Отправлено: 10:28, 14-04-2014 | #7


Пользователь


Сообщения: 57
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Цитата Foreigner:
$a = [datetime]::parseexact('2014-03-09 23-00','yyyy-MM-dd HH-mm',$null)
$unixtime = (new-timespan '01.01.1970' $a).totalseconds
$unixtime »
c повершел никогда не сталкивался....не пойму куда ввод файла а куда вывод
это он будет только на ту дату реагировать?
я вот еще одно решение нашел....но опять таки не пойму где ввлд где вывод
Цитата:
$unixEpochStart = new-object DateTime 1970,1,1,0,0,0,([DateTimeKind]::Utc)
[int]([DateTime]::UtcNow - $unixEpochStart).TotalSeconds

Отправлено: 17:22, 14-04-2014 | #8


Ветеран


Сообщения: 1759
Благодарности: 966

Профиль | Цитировать


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

Отправлено: 17:25, 14-04-2014 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - unix epoch. переформатирование даты в нормальную в текстовом файле

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Как заменить символы в текстовом файле yaoleg2 Скриптовые языки администрирования Windows 0 29-03-2013 15:48
CMD/BAT - Подсчет количества строк в текстовом файле sl1mus Скриптовые языки администрирования Windows 3 28-06-2012 21:29
VBS/WSH/JS - Поиск\редактирование строки в текстовом файле pavvel Скриптовые языки администрирования Windows 2 11-04-2012 16:38
CMD/BAT - [решено] Заменить строки в текстовом файле aos Скриптовые языки администрирования Windows 3 10-02-2012 14:45
подсчёт слов в текстовом файле bakatum Хочу все знать 4 22-01-2010 21:10




 
Переход