Команда stat
нестандартна. Один для Linux, более ограниченный для встроенного Linux, один с совершенно разными параметрами для FreeBSD и OSX и ни одного для большинства других вариантов Unix, таких как Solaris, AIX и HP-UX. Ваш синтаксис выглядит так, как будто он предназначен для Linux stat
.
Очевидно, вы используете систему без stat
. Вероятно, у вас тоже нет date -d
.
Единственный переносимый способ указать время доступа к файлу - использовать ls
.
ls -log -u find.txt
Это дает менее точный результат, чем то, что вам нужно, в громоздком формате.
Если вы можете установить GNU coreutils , сделайте это и используйте его команды stat
и date
. Многие современные варианты Unix имеют простой способ установки утилит GNU.
В качестве альтернативы используйте Perl, который очень часто устанавливается в системах Unix. Вызовите stat
, чтобы прочитать метку времени файла, и localtime
, чтобы разбить метку времени на части даты и времени.
perl -e '@stat = stat($ARGV[0]); @time = localtime($stat[9]); printf "%04d%02d%02d%02d%02d%02d\n", $time[5]+1900, @time[4,3,2,1,0]'
Suponiendo que el archivo es un archivo JSON -bien formado, debe usar un analizador JSON para analizarlo.
Usando eljq
analizador JSON en un archivo:
$ jq '.[] |.timestamp' filename.json
1510690197540
1510690197552
1510690197556
1510690197558
La expresión .[] |.timestamp
crea un bucle implícito sobre todos los objetos de la matriz y extrae el valor timestamp
de cada uno.
También podría escribirse
$ jq '.[].timestamp' file.json
No relacionado:
Para encontrar el id
del objeto con el máximotimestamp
:
$ jq 'max_by(.timestamp).id' file.json
4
Para bastante -imprime tu archivo JSON:
$ jq. file.json
Puedes usar
grep -oP '"timestamp":\s*\K\d+' filename
no importa si todo está en una línea,buscará todas las apariciones de números después de la cadena "marca de tiempo :"
resultado:
1510690197540
1510690197552
1510690197556
1510690197558
solución awk:
awk -F, '{ for (i=1;i<=NF;i++) { if ($i~/timestamp/) { split($i,slt,":");print slt[2] } } }' filename
resultado:
1510690197540
1510690197552
1510690197556
1510690197558
Recorra cada uno de los campos delimitados por una coma y luego tome la coincidencia de campo y patrón con la marca de tiempo. Si hay una coincidencia, divida el campo usando :en una matriz slt. Luego imprima el segundo elemento de la matriz.