조건부로 열을 두 행으로 분할하시겠습니까?

조건부로 열을 두 행으로 분할하시겠습니까?

다음 형식의 파일이 있습니다.

 ⌚..⌛    watch..hourglass
 ⌨️       keyboard
 ⏏️       eject button

일부 줄에는 두 개의 항목이 포함되어 있습니다. 2개의 항목이 포함된 행을 다음과 같이 2개의 행으로 분할하고 싶습니다.

 ⌚       watch
 ⌛       hourglass
 ⌨️       keyboard
 ⏏️       eject button

이 작업을 수행하는 빠른 방법이 있나요?


내 스크립트:

#!/usr/bin/env bash

wget -O output.txt http://www.unicode.org/Public/emoji/6.0/emoji-data.txt

sed -i '/^#/ d' output.txt                        # Remove comments                                                                                                          
sed -i 's/.*(//' output.txt                       # Remove columns not needed                                                                                               
sed -i 's|[(),]||g' output.txt                    # Remove brackets around emoji                                                                                         
sed -i 's/\(.*[^ ]\)[ ]*\(.*\)/\2 \1/' output.txt # Move first column to last                                                                         
sed -i '/^$/d' output.txt                         # Remove blank lines

다음 질문에 대한 @RomanPerekhrest의 답변을 시도했습니다.(답변이 업데이트되었습니다):

 ↔️..↙️    left-right arrow..down-left arrow
 ↩️..↪️    right arrow curving left..left arrow curving right
 ⌚..⌛    watch..hourglass done
 ⌨️       keyboard

시계/모래시계에서는 작동하지만 위의 시계/모래시계에서는 작동하지 않습니다(?)

답변1

고쳐 쓰다

일부 이모티콘 뒤에 표시되는 문제가 해결되었습니다.변경 선택기 16, 형식 오류가 발생합니다.

@jimmij의 내용을 참조하세요.답변, 보다 최적화된 sed 스크립트를 얻으려면!

sed

 sed '/.\.\./ s/\(.\)\.\.\(\S*\)\s*\(.*\)\.\./\1\t\3\n \2\t/'

답변2

zeppelin의 답변을 기반으로 한 또 다른 sed버전이지만 더 간단하고 정렬되어 있습니다. 유니코드가 항상 단일 문자는 아닙니다. 테스트에는 gnu를 사용하십시오 sed.

sed 's/\.\.\([^ ]*\) *\(.*\)\.\./\t\2\n \1\t/'

산출:

 ↔️      left-right arrow
 ↙️      down-left arrow
 ↩️      right arrow curving left
 ↪️      left arrow curving right
 ⌚      watch
 ⌛      hourglass done
 ⌨️       keyboard

답변3

해결책:

awk -F'[[:space:]][[:space:]]+' '$1~/\S\.\.\S/ && $2~/\S\.\.\S/{ 
         split($1,a,/\.\./); split($2,b,/\.\./); 
         printf("%s\t%s\n%s\t%s\n",a[1],b[1],a[2],b[2]); next 
     }1' file
  • -F'[[:space:]][[:space:]]+'- 필드 구분 기호

  • $1~/\S\.\.\S/ && $2~/\S\.\.\S/- 2개의 필드에 ..다음이 포함된 경우하위 프로젝트분할기

산출:

↔️  left-right arrow
↙️  down-left arrow
↩️  right arrow curving left
↪️  left arrow curving right
⌚   watch
⌛   hourglass done
⌨️       keyboard

관련 정보