将单列文件转换为多列

Alb*_*lby 3 unix bash command-line multiple-columns

基本上,我想将一个列文件转换为由行数指定的多个列文件.

我不想重新发明轮子.我想在编写自定义脚本之前确保是否有unix命令/或标准方法.

例如,假设我有以下文件:

$cat input.txt
tom
jack
kim
bart
foo
bar
Run Code Online (Sandbox Code Playgroud)

我想把它变成3行文件

$ cat input.txt | my_script --every=3 --delimiter=tab
tom bart
jack foo
kim bar
Run Code Online (Sandbox Code Playgroud)

或具有不同分隔符的2行文件:

$ cat input.txt | my_script --every=2 --delimiter=,
tom,kim,foo
jack,bart,bar
Run Code Online (Sandbox Code Playgroud)

fed*_*qui 8

怎么用xargs

每行两条记录:

$ xargs -n2 < file
tom jack
kim bart
foo bar
Run Code Online (Sandbox Code Playgroud)

每行三条记录:

$ xargs -n3 < file
tom jack kim
bart foo bar
Run Code Online (Sandbox Code Playgroud)

  • 这首先填充行,这不是问题示例所演示的内容。 (2认同)

小智 6

您可以paste在 UNIX 中使用命令将文件转换为多列。默认情况下,制表符是分隔符。要更改分隔符,请使用-d选项

命令:将一列文件转换为两列

paste - - < input.txt
Run Code Online (Sandbox Code Playgroud)

输出:

tom  bart 
jack foo 
kim  bar
Run Code Online (Sandbox Code Playgroud)

命令:,以分隔符将一列文件转换为两列

paste - - -d, < input.txt
Run Code Online (Sandbox Code Playgroud)

输出:

tom,bart 
jack,foo 
kim,bar
Run Code Online (Sandbox Code Playgroud)


Jay*_*hoi 3

awk

 awk -v row=2 '{A[(NR-1)%row]=A[(NR-1)%row]$0" ";next}END{for(i in A)print A[i]}' file
Run Code Online (Sandbox Code Playgroud)

输出:

tom  bart 
jack foo 
kim  bar 
Run Code Online (Sandbox Code Playgroud)

此处指定变量中所需的行数raw。例如:row=3三行。

如果您只想打破特定行中的列,请尝试这样做

cat file | xargs -n2

这里 2 每行包含 2 列,你可以使用你想要的。