假设我有一个VI文件,如下所示:
猫文件1
abc 123 pqr
lmn 234 rst
jkl 100 mon
我想利用每一行的第二场(即,在这种情况下是123,234和100),并将其附加到这条线上的结束。 我将如何做呢?
输出应该如下所示:
abc 123 pqr 123
lmn 234 rst 234
jkl 100 mon 100
假设我有一个VI文件,如下所示:
猫文件1
abc 123 pqr
lmn 234 rst
jkl 100 mon
我想利用每一行的第二场(即,在这种情况下是123,234和100),并将其附加到这条线上的结束。 我将如何做呢?
输出应该如下所示:
abc 123 pqr 123
lmn 234 rst 234
jkl 100 mon 100
随着awk
:
$ awk '{NF=NF+1; $NF=$2}1' file
abc 123 pqr 123
lmn 234 rst 234
jkl 100 mon 100
它增加字段的一个数,并设置最后一个作为第二。 然后1
是一个真正的条件,这被评价为默认的awk行为: {print $0}
或者也
awk '{print $0, $2}' file
它打印的全线加上第二场。
或者更短, 感谢哈康Hægland! :
awk '{$(NF+1)=$2}1' file
你有很多方法可以做到,在六(M)。 这是在我脑海中最简单的:
:%norm 0f<space>yaw$p
说明:
:{range}norm command
执行正常模式command
在每行中{range}
%
是一条捷径范围,意思是“缓冲区中的所有行”,所以我们将在缓冲区执行每行上下文 0
把光标在第一列上的电流线(不是绝对必要的,但良好的做法) f<space>
跳跃在第一光标<space>
光标在当前行之后 yaw
猛拉的字和<space>
光标下 $
跳到一行的末尾 p
粘贴先前抽出的文本 与标记提示,你可以在vi做
:%s/\( [^ ]*\)\(.*\)/\1\2\1/
另一种方法,使用的sed
sed -r 's/( [^ ]*)(.*)/\1\2\1/' file