정규식 일치 항목을 찾고 다음 숫자 문자열을 추출해야 하는 SQL 쿼리에서 반환된 형식화되지 않은 파일이 있습니다. 숫자는 두 개의 큰따옴표로 묶여 있습니다. 행당 여러 일치 항목이 발생할 수 있습니다. 파일에는 무시해야 할 다른 특수 문자가 있습니다. 샘플 파일은 다음과 같습니다.
{ "_id" : "66941672632817171654", "title" : "Some Name (Central)", "stationNameAssoc" : [ { "stationId" : "6248915749115539177", "stationName" : "Default" } ] }
{ "_id" : "4455677484649934117", "title" : "Some Name (Mountain)", "stationNameAssoc" : [ { "stationId" : "7597999415247634177", "stationName" : "Default" } ] }
여기에서 "stationId" 뒤에 따옴표를 제외하고 숫자를 추출하고 싶습니다(예: 7597999415247634177). awk나 bash를 사용하면 어떻게 할 수 있나요? 감사해요
답변1
json이라는 Json 도구를 사용합니다(https://github.com/trentm/json)
$ json -ga 'stationNameAssoc.[0].stationId' < input
6248915749115539177
7597999415247634177
또는 단계별로 사용하세요.
cat input | json -ga 'stationNameAssoc' | json -ga stationId
설명서는 다음 위치에 있습니다.http://trentm.com/json/
설치되지 않은 경우:
install node
and sudo npm install -g json
답변2
또 다른 JSON 파서 솔루션을 사용하십시오.jq
:
$ jq -r '.stationNameAssoc[0].stationId' data.json
6248915749115539177
7597999415247634177
stationId
이는 단순히 각 배열의 첫 번째(유일한) 배열 항목 항목의 값을 가져옵니다 stationNameAssoc
.
답변3
awk -F\" '{for(i=1;i<=NF;i++)if($i~/Id/){print $(i+2);next}}' input.txt