Извлечь целое число в строке строки

Команда 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]'

1
16.02.2018, 17:40
3 ответа

Suponiendo que el archivo es un archivo JSON -bien formado, debe usar un analizador JSON para analizarlo.

Usando eljqanalizador JSON en un archivo:

$ jq '.[] |.timestamp' filename.json
1510690197540
1510690197552
1510690197556
1510690197558

La ​​expresión .[] |.timestampcrea un bucle implícito sobre todos los objetos de la matriz y extrae el valor timestampde cada uno.

También podría escribirse

$ jq '.[].timestamp' file.json

No relacionado:

Para encontrar el iddel objeto con el máximotimestamp:

$ jq 'max_by(.timestamp).id' file.json
4

Para bastante -imprime tu archivo JSON:

$ jq. file.json
3
28.04.2021, 23:50

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
1
28.04.2021, 23:50

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.

0
28.04.2021, 23:50

Теги

Похожие вопросы