"성, 이름" 형식의 한 열이 있는 탭으로 구분된 파일이 있습니다. 내가하고 싶은 것은 레코드를 두 개의 별도 열, last
, 및 first
, 사용 cut
또는 다른 동사 로 분할하는 것입니다.저것, 결과를 JSON으로 출력합니다.
나는 JSON과 결혼하지 않았으며 다음과 같은 다른 도구를 사용하는 방법을 알고 있다는 점을 덧붙여야 합니다.jq
, 하지만 이 형식을 한 번에 얻는 것이 좋을 것입니다.
이 동사의 구문은 nest
솔직히 기억할 수 없는 기억해야 할 옵션이 많은 것처럼 보이므로 이 작업을 수행하는 간단한 DSL 작업이 있어야 한다고 생각했습니다. 어쩌면 그렇지 않을 수도 있나요?
내가 시도한 것은 다음과 같습니다. (지금은 추가 공간이 붙어 있다는 것은 잊어 버리자 , 알았지? 나중에 없애기 위해 or 또는 뭔가를 Firstname
사용하겠습니다 .)strip
ssub
echo -e "last_first\nLastName, Firstname" \
| mlr --t2j put '$o=splitnv($last_first,",")'
# result:
# { "last_first": "LastName, Firstname", "o": "(error)" }
# expected something like:
# { "last_first": "LastName, Firstname", "o": { 1: "LastName", 2: "Firstname" } }
#
# or:
# { "last_first": "LastName, Firstname", "o": [ "LastName", "Firstname" ] }
왜 (error)
? $o
위와 같이 할당하면 결과에 새 열이 할당된다는 o
것이 말이 되지 않습니까 splitnv
?
내가 시도한 다른 방법은 다음과 같습니다. 하지만 예상대로 작동하지 않습니다.
echo -e "last_first\nLastName, Firstname" \
| mlr -T nest --explode --values --across-fields --nested-fs , -f last_first
# result (no delimiter here, just one field, confirmed w/ 'cat -A')
# last_first
# LastName, Firstname
# expected:
# last_first_1<tab>last_first_2
# LastName,<tab> Firstname
편집하다:위 명령의 문제점은 을 사용해야 한다는 것입니다 --tsv
.아니요 -T
--nidx --fs tab
, (숫자 인덱스 열)의 동의어입니다. 문제는 이 경우 명명된 열을 요청할 때 분명히 잘못된 것이며 Miller는 버그가 있는 기능일 수 있는 오류 메시지를 생성하지 않는다는 것입니다.이슈 #233.
어떤 통찰력이라도 대단히 감사하겠습니다.
답변1
당신이 요구하는 것을 내가 이해했는지 모르겠습니다.
내가 달리면
echo -e "last_first\nLastName, Firstname" | \
mlr --t2j --jlistwrap --jvstack nest --explode --values --across-fields --nested-fs "," -f last_first \
then clean-whitespace
나는 가지고있다
[
{
"last_first_1": "LastName",
"last_first_2": "Firstname"
}
]
내가 달리면
echo -e "last_first\nLastName, Firstname" | \
mlr --tsv nest --explode --values --across-fields --nested-fs "," -f last_first \
then clean-whitespace
나는 가지고있다
last_first_1 last_first_2
LastName Firstname
답변2
LastName, FirstName
FirstName LastName
DSL 표현식 사용으로 전환하는 방법은 다음과 같습니다 .
echo -e "last_first\nLastName, Firstname\nAnotherLast, AnotherFirst" \
| mlr --t2j \
put -q 'o=splitnv($last_first,",");
first_last=strip(o[2]) . " " . o[1];
emit first_last'
# result:
# { "first_last": "Firstname LastName" }
# { "first_last": "AnotherFirst AnotherLast" }
필수(?)인 것 같다고 생각하는 부분이 emit
이전에는 이해하지 못했던 핵심 부분입니다.
슬프게도,아니요nest
동사와 모든 필수 플래그를 사용하는 것보다 훨씬 쉽습니다.