次の形式のファイルがあります。
⌚..⌛ 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