몇 년 동안 (정렬 된) 텍스트와 일치하는 첫 번째 필드를 결합해야 할 필요가 있으며 우아한 (예 : 한 줄짜리 유닉스 명령 행) 방법을 찾지 못했습니다. 해. 내가 원했던 것은 유닉스 join
명령으로 가능했던 것과 비슷하지만 join
은 2 개의 파일이 필요하며 각 키는 최대 한 번 나타납니다. 하나의 파일로 시작하여 키가 여러 개의 타일로 나타날 수 있습니다.일치하는 첫 번째 필드가있는 행 결합
나는이 작업을 수행하는 루비와 펄 스크립트를 가지고 있지만 알고리즘을 한 줄로 줄이는 방법은 없습니다. 수년간의 유닉스 사용 후, 나는 여전히 comm
, paste
, uniq
등과 같은 새로운 트릭을 배우고 있으며,이를위한 현명한 방법이 있다고 생각한다.
join all lines that have the same first column to the same line과 같은 몇 가지 관련 질문이 있습니다. Command line to match lines with matching first field (sed, awk, etc.); Combine lines with matching keys -하지만 이러한 솔루션은 결코 깨끗하고 안정적인 솔루션을 제공하지 못합니다.
apple:A fruit
apple:Type of: pie
banana:tropical fruit
cherry:small burgundy fruit
cherry:1 for me to eat
cherry:bright red
여기 샘플 출력 :
다음은 샘플 입력의
apple:A fruit;Type of: pie
banana:tropical fruit
cherry:small burgundy fruit;1 for me to eat;bright red
여기 내 이상적인 구문입니다 :
이merge --inputDelimiter=":" --outputDelimiter=";" --matchfield=1 infile.txt
은 "matchfield는"정말 선택 사항입니다. 항상 첫 번째 필드가 될 수 있습니다. 후속 구분 기호는 일반 텍스트처럼 취급해야합니다.
당신이 짧고 우아한 알고리즘을 생각할 수 있다면 나는 펄, 루비, awk 한 - 라이너 상관 없어. 이것은 수백만 줄의 입력을 처리 할 수 있어야합니다. 어떤 아이디어?
고마워요 @RomanPerekhrest, 그건 작동합니다. 복잡한 라인을 깰 수있는 과거에 시도한 다른 awk 솔루션보다 낫다. 즉, 나는 여전히 간단한 구문으로 더 짧은 명령어를 좋아할 것이지만, 한 줄짜리를 가지고 기쁘게 생각합니다. – MichaelD