Phi*_*pos 3 utilities text-processing
有一些工具,例如datamesh在文件中转置矩阵csv,但我想基于字符交换行和列。所以一个文件
abcde
fghij
klmn
opqrs
Run Code Online (Sandbox Code Playgroud)
应该成为
afko
bglq
chmq
dinr
ej s
Run Code Online (Sandbox Code Playgroud)
请注意,由于第 3 行较短,因此必须在最后一行插入一个空格。
当然,我可以编写一些 C 程序来做到这一点,但我想我曾经遇到过一个可以做到这一点的工具,但我的搜索引擎无法帮助我找到它。
您可以使用rs纯转置 ( -T) 模式下的实用程序来完成此操作 - 如果您首先适当地间隔输入,即
$ sed -e 's/./& /g' -e 's/ $//' file
a b c d e
f g h i j
k l m n
o p q r s
Run Code Online (Sandbox Code Playgroud)
(或者,如果您有 GNU sed,则可以使用sed 's/./ &/2g';另一个选项是使用循环sed -E ':a; s/([^ ])([^ ])/\1 \2/; ta');然后
$ sed -e 's/./& /g' -e 's/ $//' file | rs -Tng0
afko
bglp
chmq
dinr
ej s
Run Code Online (Sandbox Code Playgroud)
重要的选项是:
-T纯转置-n填充空条目-g0将输出装订线宽度(列间距)设置为零awk或者,使用空输入字段分隔符和默认输出字段分隔符进行输入拆分:
awk '{$1=$1} 1' FS= file | rs -Tng0
Run Code Online (Sandbox Code Playgroud)