我想知道是否有一种更简单的方法来交换每行的前两个单词。
假设我的文本文件由以下三行组成:
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