条件付きで列を2行に分割しますか?

条件付きで列を2行に分割しますか?

次の形式のファイルがあります。

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

一部の行には2つの項目が含まれています。 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バージョンですが、よりシンプルでソートされています。 Unicodeは常に単一文字ではありません。テストには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

関連情報