문자열 줄에서 정수 추출

문자열 줄에서 정수 추출

텍스트 파일에서 숫자를 추출하는 데 문제가 있습니다. 기본적으로 다음과 같습니다(모두 한 줄에 표시됩니다. 가독성을 높이기 위해 여기에서는 구분합니다).

[{"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로 분할합니다. 그런 다음 배열의 두 번째 요소를 인쇄합니다.

관련 정보