내 텍스트 파일의 데이터 형식은 다음과 같습니다.
alex street1 253465873 [email protected]
john street2 442893646 [email protected]
kevin street3 125234763 [email protected]
이 데이터를 헤더가 있는 json 형식으로 변환해야 합니다.
"name" "street" "phone" "e-mail"
답변1
당신은 읽을 수있다원래 입력다음과 같이 공백으로 구분된 필드로 분할합니다 jq
.
$ cat file.txt |
jq -nR '[inputs | split(" ") | { "name": .[0], "street": .[1], "phone": .[2], "e-mail": .[3] }]'
[
{
"name": "alex",
"street": "street1",
"phone": "253465873",
"e-mail": "[email protected]"
},
{
"name": "john",
"street": "street2",
"phone": "442893646",
"e-mail": "[email protected]"
},
{
"name": "kevin",
"street": "street3",
"phone": "125234763",
"e-mail": "[email protected]"
}
]
또는 간단한(중첩되지 않은) 표 형식 데이터의 경우 다음을 사용할 수 있습니다.밀러
mlr --inidx --ojson --jvstack rename '1,name,2,street,3,phone,4,e-mail' file.txt
답변2
$ column --table --separator=" " --table-columns name,street,phone,email --json test.txt
{
"table": [
{
"name": "alex",
"street": "street1",
"phone": "253465873",
"email": "[email protected]"
},{
"name": "john",
"street": "street2",
"phone": "442893646",
"email": "[email protected]"
},{
"name": "kevin",
"street": "street3",
"phone": "125234763",
"email": "[email protected]"
}
]
}
답변3
사용밀러( mlr
) 헤더가 없고 공백으로 구분된 데이터를 JSON으로 변환합니다.
$ mlr --n2j label name,street,phone,e-mail file
{ "name": "alex", "street": "street1", "phone": 253465873, "e-mail": "[email protected]" }
{ "name": "john", "street": "street2", "phone": 442893646, "e-mail": "[email protected]" }
{ "name": "kevin", "street": "street3", "phone": 125234763, "e-mail": "[email protected]" }
출력은 각 입력 레코드에 대한 별도의 JSON 개체입니다. 이 옵션은 ("입력은 암시적 정수 인덱스(nidx)입니다.") 및 ("출력은 JSON입니다.") 의 약어입니다 --n2j
.--inidx
--ojson
이 label
하위 명령은 필드 이름을 순차적으로 바꿉니다.
결과 객체 세트를 배열로 래핑하려면 다음을 사용하십시오 --jlistwrap
.
$ mlr --n2j --jlistwrap label name,street,phone,e-mail file
[
{ "name": "alex", "street": "street1", "phone": 253465873, "e-mail": "[email protected]" }
,{ "name": "john", "street": "street2", "phone": 442893646, "e-mail": "[email protected]" }
,{ "name": "kevin", "street": "street3", "phone": 125234763, "e-mail": "[email protected]" }
]
답변4
다음 awk 명령을 사용해 보세요.
$ awk '{for (i=1;i<=NF;i++){$i="\""$i"\"";printf $i" "}};{printf"\n"}' infile
"alex" "street1" "253465873" "[email protected]"
"john" "street2" "442893646" "[email protected]"
"kevin" "street3" "125234763" "[email protected]"