如何基于字符转置文本文件

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 程序来做到这一点,但我想我曾经遇到过一个可以做到这一点的工具,但我的搜索引擎无法帮助我找到它。

ste*_*ver 5

您可以使用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)