
텍스트 파일에서 숫자를 추출하는 데 문제가 있습니다. 기본적으로 다음과 같습니다(모두 한 줄에 표시됩니다. 가독성을 높이기 위해 여기에서는 구분합니다).
[{"id":1,"width":720,"height":480,"longitude":20.104258199768,"timestamp":1510690197540,"frame_content":"some other informations...},
{"id":2,"width":720,"height":480,"longitude":20.104258199768,"timestamp":1510690197552,"frame_content":"some other informations...},
{"id":3,"width":720,"height":480,"longitude":20.104258199768,"timestamp":1510690197556,"frame_content":"some other informations...},
{"id":4,"width":720,"height":480,"longitude":20.104258199768,"timestamp":1510690197558,"frame_content":"some other informations...},
and so on.....]
내가 하고 싶은 일은 타임스탬프 태그 뒤의 모든 값을 추출하는 것입니다. 문제는 내꺼야파일은 한 줄로만 구성됩니다.이로 인해 약간 까다로워지고 변경할 수 없을 것 같습니다. 인터넷에서 솔루션을 찾은 후 sed
및 명령을 시도했지만 지금까지는 성공하지 못했습니다.grep
이 문제에 대해 도움을 주시면 감사하겠습니다 :)
감사합니다!
답변1
파일이 올바른 형식의 JSON 파일이라고 가정하면 JSON 파서를 사용하여 구문 분석해야 합니다.
사용jq
파일의 JSON 파서:
$ jq '.[] | .timestamp' filename.json
1510690197540
1510690197552
1510690197556
1510690197558
이 표현식은 .[] | .timestamp
배열의 모든 개체에 대해 암시적 루프를 만들고 timestamp
각 개체에서 값을 추출합니다.
다음과 같이 쓸 수도 있습니다.
$ jq '.[].timestamp' file.json
관련 없음:
id
최대값을 가진 객체를 찾으려면 timestamp
:
$ jq 'max_by(.timestamp).id' file.json
4
JSON 파일을 예쁘게 인쇄하려면:
$ jq . file.json
답변2
당신은 그것을 사용할 수 있습니다
grep -oP '"timestamp":\s*\K\d+' filename
모든 것이 한 줄에 있는지는 중요하지 않습니다. "timestamp:" 문자열 뒤에 나타나는 모든 숫자를 검색합니다.
결과:
1510690197540
1510690197552
1510690197556
1510690197558
답변3
이상한 해결책 :
awk -F, '{ for (i=1;i<=NF;i++) { if ($i~/timestamp/) { split($i,slt,":");print slt[2] } } }' filename
결과:
1510690197540
1510690197552
1510690197556
1510690197558
쉼표로 구분된 각 필드를 반복하고 필드와 패턴을 타임스탬프와 일치시킵니다. 일치하는 항목이 있으면 다음을 사용하여 필드를 배열 slt로 분할합니다. 그런 다음 배열의 두 번째 요소를 인쇄합니다.