有条件地将列分成 2 行?

Phi*_*ide 5 sed awk text-processing unicode

我有一个格式如下的文件:

 ?..?    watch..hourglass
 ??       keyboard
 ??       eject button
Run Code Online (Sandbox Code Playgroud)

其中某些行包含两个条目。我想将包含 2 个条目的行分成 2 行,如下所示:

 ?       watch
 ?       hourglass
 ??       keyboard
 ??       eject button
Run Code Online (Sandbox Code Playgroud)

有没有快速的方法来做到这一点?


我的脚本:

#!/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
Run Code Online (Sandbox Code Playgroud)

尝试了@RomanPerekhrest 对以下内容的回答(答案已更新)

 ??..??    left-right arrow..down-left arrow
 ??..??    right arrow curving left..left arrow curving right
 ?..?    watch..hourglass done
 ??       keyboard
Run Code Online (Sandbox Code Playgroud)

它适用于手表/沙漏,但不适用于上面的(?)

zep*_*lin 4

更新

修复了一些表情符号后跟有variation-selector-16,导致格式错误的问题。

请参阅 @jimmij 的答案,以获得更优化的 sed 脚本!

sed

 sed '/.\.\./ s/\(.\)\.\.\(\S*\)\s*\(.*\)\.\./\1\t\3\n \2\t/'
Run Code Online (Sandbox Code Playgroud)