不使用 sed 交换每行的前两个单词

不使用 sed 交换每行的前两个单词

我想知道是否有一种更简单的方法来交换每行的前两个单词。

假设我的文本文件由以下三行组成:

 Mary Joe
 William Edward
 Shawn Liam

最终我想要这个:

 Joe Mary 
 Edward William
 Liam Shawn

我知道这可以通过 sed 命令来完成:

sed -e "s/\([^ ]*\) *\([^ ]*\)/\2 \1 /g" file

但要记住的就太多了。

有没有更简单的方法来做到这一点。

顺便说一句,这是 bash。

答案1

使用两条字线,这可能会更容易:

awk '{print $2,$1}' file

如果您需要交换文件的前两个单词,每行有或没有两个单词:

awk 'NF >= 2{t=$2;$2=$1;$1=t};{print}' file

请注意,这会将多个空格折叠为一个。

答案2

如果你的单词是用空格分隔的,那么awk会更容易:

awk 'NF > 1 {a = $1; $1 = $2; $2 = a};1' <file

相关内容