将这两列转换成行?
Transpose these two colums into rows?
我从网页上复制粘贴了一些数据:
x y
0 9
2 22.6
4 44.2
5 62.1
7 96.9
8 113.4
10 133.4
11 137.6
15 148.4
17 149.3
我想转置并稍微转换数据,例如:
x = 0,2,4,...
y = 9, 22.6, 44.2...
我知道如何使用 v 模式在每列之后放置逗号,但我不知道当我有两位数或字符长度混合的列时如何工作。
我更关心如何转置,如果这是我想要的命令?
如何将我的数据转换为所需的形式:
x = 0,2,4,...
y = 9, 22.6, 44.2...
如果您安装了外部工具 rs
请参阅下面的第二种方法,
否则:
纯粹Vim
我的方法将围绕使用视觉块模式 Ctrl
+
v
并应用 J
命令,并使用替换进行清理。第一的
select可视块中的第二列删除,然后粘贴到
x 列:
x
0
2
4
5
7
8
10
11
15
17
y
9
22.6
44.2
62.1
96.9
113.4
133.4
137.6
148.4
149.3
然后你可以vipJ
,在每个块上,select那个数据,然后把它放在一个
行(仅供参考:vipJ
将进入 v
isual 模式,selecting i
nside p
段落,
然后 J
加入这些行):
x 0 2 4 5 7 8 10 11 15 17
y 9 22.6 44.2 62.1 96.9 113.4 133.4 137.6 148.4 149.3
快速替换:s/\s\+/, /g
可以用逗号替换空格:
, x, 0, 2, 4, 5, 7, 8, 10, 11, 15, 17,
, y, 9, 22.6, 44.2, 62.1, 96.9, 113.4, 133.4, 137.6, 148.4, 149.3
那你可以把多余的逗号清理掉,加上=
号,去掉
空白行等:
x = 0, 2, 4, 5, 7, 8, 10, 11, 15, 17
y = 9, 22.6, 44.2, 62.1, 96.9, 113.4, 133.4, 137.6, 148.4, 149.3
如果有很多列,您可能不想重复该过程
以上每个...在这种情况下,您可以将以上内容记录为
以可重复的方式宏或查看下面的方法。
使用外部工具 rs
rs
工具允许您重塑数据数组,因此您可以过滤文件
(或视觉 selection,或传递范围)从 vim 内部穿过工具
像这样:
:%!rs -T -C,
flags -T
表示转置,-C
指定列分隔符
产生的输出(在我们的例子中是逗号):
x,0,2,4,5,7,8,10,11,15,17,
y,9,22.6,44.2,62.1,96.9,113.4,133.4,137.6,148.4,149.3,
然后就像在纯粹的 vim 方法中一样,您只需要做一些清理工作:
:%s/,/, /g
产生:
x, 0, 2, 4, 5, 7, 8, 10, 11, 15, 17,
y, 9, 22.6, 44.2, 62.1, 96.9, 113.4, 133.4, 137.6, 148.4, 149.3,
然后你可以清理多余的逗号并添加=
符号:
x = 0, 2, 4, 5, 7, 8, 10, 11, 15, 17
y = 9, 22.6, 44.2, 62.1, 96.9, 113.4, 133.4, 137.6, 148.4, 149.3
奖金
如果需要,您可以 运行 外部命令(也可以在视觉 selection 上,或者
传递一个范围):%!column -t
来很好地对齐:
x = 0, 2, 4, 5, 7, 8, 10, 11, 15, 17
y = 9, 22.6, 44.2, 62.1, 96.9, 113.4, 133.4, 137.6, 148.4, 149.3
我从网页上复制粘贴了一些数据:
x y
0 9
2 22.6
4 44.2
5 62.1
7 96.9
8 113.4
10 133.4
11 137.6
15 148.4
17 149.3
我想转置并稍微转换数据,例如:
x = 0,2,4,...
y = 9, 22.6, 44.2...
我知道如何使用 v 模式在每列之后放置逗号,但我不知道当我有两位数或字符长度混合的列时如何工作。
我更关心如何转置,如果这是我想要的命令?
如何将我的数据转换为所需的形式:
x = 0,2,4,...
y = 9, 22.6, 44.2...
如果您安装了外部工具 rs
请参阅下面的第二种方法,
否则:
纯粹Vim
我的方法将围绕使用视觉块模式 Ctrl
+
v
并应用 J
命令,并使用替换进行清理。第一的
select可视块中的第二列删除,然后粘贴到
x 列:
x
0
2
4
5
7
8
10
11
15
17
y
9
22.6
44.2
62.1
96.9
113.4
133.4
137.6
148.4
149.3
然后你可以vipJ
,在每个块上,select那个数据,然后把它放在一个
行(仅供参考:vipJ
将进入 v
isual 模式,selecting i
nside p
段落,
然后 J
加入这些行):
x 0 2 4 5 7 8 10 11 15 17
y 9 22.6 44.2 62.1 96.9 113.4 133.4 137.6 148.4 149.3
快速替换:s/\s\+/, /g
可以用逗号替换空格:
, x, 0, 2, 4, 5, 7, 8, 10, 11, 15, 17,
, y, 9, 22.6, 44.2, 62.1, 96.9, 113.4, 133.4, 137.6, 148.4, 149.3
那你可以把多余的逗号清理掉,加上=
号,去掉
空白行等:
x = 0, 2, 4, 5, 7, 8, 10, 11, 15, 17
y = 9, 22.6, 44.2, 62.1, 96.9, 113.4, 133.4, 137.6, 148.4, 149.3
如果有很多列,您可能不想重复该过程 以上每个...在这种情况下,您可以将以上内容记录为 以可重复的方式宏或查看下面的方法。
使用外部工具 rs
rs
工具允许您重塑数据数组,因此您可以过滤文件
(或视觉 selection,或传递范围)从 vim 内部穿过工具
像这样:
:%!rs -T -C,
flags -T
表示转置,-C
指定列分隔符
产生的输出(在我们的例子中是逗号):
x,0,2,4,5,7,8,10,11,15,17,
y,9,22.6,44.2,62.1,96.9,113.4,133.4,137.6,148.4,149.3,
然后就像在纯粹的 vim 方法中一样,您只需要做一些清理工作:
:%s/,/, /g
产生:
x, 0, 2, 4, 5, 7, 8, 10, 11, 15, 17,
y, 9, 22.6, 44.2, 62.1, 96.9, 113.4, 133.4, 137.6, 148.4, 149.3,
然后你可以清理多余的逗号并添加=
符号:
x = 0, 2, 4, 5, 7, 8, 10, 11, 15, 17
y = 9, 22.6, 44.2, 62.1, 96.9, 113.4, 133.4, 137.6, 148.4, 149.3
奖金
如果需要,您可以 运行 外部命令(也可以在视觉 selection 上,或者
传递一个范围):%!column -t
来很好地对齐:
x = 0, 2, 4, 5, 7, 8, 10, 11, 15, 17
y = 9, 22.6, 44.2, 62.1, 96.9, 113.4, 133.4, 137.6, 148.4, 149.3