awkまたはsed、最初の列を最後に移動しますか?

awkまたはsed、最初の列を最後に移動しますか?

以下のようにスペースで区切られたテキストファイルがあります。最初の列が各行の終わりになるように列を並べ替える必要があります。

orを使ってこれを行う方法を知っていますが、簡単な方法がcut -d' ' f1あるかどうか疑問に思います。awksed

テキストファイル:

™️       trade mark
ℹ️       information
↔️..↙️    left-right arrow..down-left arrow
↩️..↪️    right arrow curving left..left arrow curving right
⌚..⌛    watch..hourglass done
⌨️       keyboard
⏏️       eject button
⏩..⏳    fast-forward button..hourglass not done
⏸️..⏺️    pause button..record button
Ⓜ️       circled M
▪️..▫️    black small square..white small square
▶️       play button
◀️       reverse button

シンボリックリストはこの説明に従ってください。

答え1

使用sed

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

\([^ ]*\)空白以外の文字が表示されるまで、すべての項目と一致します。
括弧は\(...\)グループマッチングに使用され、対応するインデックスはです\1

\(.*\)最初のグループ以降のすべての項目を一致させ、インデックスを作成します\2。グループ内で一致する
と、出力内のグループ1とグループ2の間のスペースに一致するすべての内容は無視されます。 (GNUを使用)または(標準)を使用して、ASCII SPCだけでなくすべての空白文字と一致させることができます。*\(...\) *\(...\)\s*sed[[:space:]]*

次に、最後に最初に一致する項目を印刷します。グループ2比較するグループ1その間にスペースがあります。

答え2

awk '{first = $1; $1=""; print $0, first}' file.txt

最初の列を変数に保存し、最初の列にスペースを書き、行全体($0$はい、行全体、最初の列は空です)を印刷してから、最初の列を印刷します。

答え3

awk '{ printf "%s ",$NF;for (i=2;i<=NF-1;i++) { printf " %s",$i } printf "\n" }' filename

awkの場合、$ NFは最後のデータフラグメントを表します。これを印刷し、最後のフィールドを除いて2から1の間の他のフィールドを繰り返し印刷します。

答え4

パールの使用:

perl -pe 's/(\S+)(\s+)(.*)/$3$2$1/' file

(\S+)空白以外のすべての文字を最初からキャプチャ

(\s+)キャプチャキャラクターの後ろのすべてのスペースをキャプチャ

(.*)ラインの最後まで他のすべてをキャプチャします。

$3$2$1逆方向3つのマッチングパターン

関連情報