我有一个用空格分隔的文本文件,如下所示。我需要重新排列列,以便第一列位于每行的末尾。
我知道如何使用 or 来完成此操作cut -d' ' f1
,但我想知道是否有一种简单的awk
方法sed
。
文本文件:
™️ 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
。匹配组中的
in *
out\(...\) *\(...\)
将忽略在输出中打印与组 1 和组 2 之间匹配空格的内容,您可以使用\s*
(使用 GNU sed
)或[[:space:]]*
(标准)来匹配任何空格字符,而不仅仅是 ASCII SPC。
然后最后我们首先打印匹配的组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:
perl -pe 's/(\S+)(\s+)(.*)/$3$2$1/' file
(\S+)
从头开始捕获所有非空白字符
(\s+)
捕获捕获字符后面的所有空格
(.*)
捕获所有其他内容,直到行尾
$3$2$1
反转 3 个匹配的模式