【问题标题】:How do I convert the output from ls to columns or a table? (Preferably "filelessly")如何将输出从 ls 转换为列或表? (最好是“无文件”)
【发布时间】:2020-01-22 07:49:28
【问题描述】:

假设我有一个包含一系列输入/输出文件的文件夹,我想将输入文件放在一列中,将输出文件放在第一列旁边的另一列中以比较它们:

$ ls
input1.inp  input10.inp  input2.inp  input3.inp  input4.inp  input5.inp  
input6.inp  input7.inp  input8.inp  input9.inp  output1.dat  output10.dat  
output2.dat  output3.dat  output4.dat  output5.dat  output6.dat  output7.dat  
output8.dat  output9.dat

我希望输出为:

input1.inp    output1.dat
input10.inp   output10.dat
input2.inp    output2.dat
input3.inp    output3.dat
input4.inp    output4.dat
input5.inp    output5.dat
input6.inp    output6.dat
input7.inp    output7.dat
input8.inp    output8.dat
input9.inp    output9.dat

我认为这可以使用lscolumns 或其他一些程序/工具的组合来完成。我只是想不出命令和/或管道/重定向的良好组合。我想我可以通过vimdiff 实现这一目标

vimdiff <(ls -1 *.inp) <(ls -1 *.dat)

虽然我更喜欢将输出直接打印在屏幕上 (stdout(?))。

嗯,有点尴尬,过了一会儿,我离得更近了,但还不够。所以,使用 paste 我可以非常接近我想要的:

paste <(ls -1 *.inp) <(ls -1 *.dat)

只要输入和输出文件名如示例中那样相关并且“按顺序”生成,这将起作用。

input1.inp    output1.dat
input10.inp   output10.dat
...           ...
...           ...
input7.inp    output7.dat
    input8.inp
    input9.inp

但是,如果顺序不匹配,则会移动一列,并且“匹配项”不会排列。

input1.inp    output1.dat
input10.inp   output10.dat
...           ...
...           ...
inputX.inp    output7.dat
input7.inp    
    input8.inp
    input9.inp

同样明显地观察到:

diff -y <(ls -1 *.inp) <(ls -1 *.dat)

显然,对齐输出是一个比我想象的更大的问题,因为文件名不同,前缀或后缀不同。因此,使用diff 时,每条“线”都是不同的。

我将结束这个话题,因为我现在有一些工作,只是不完全是我想象的那样。虽然我将把它打开一段时间,只是为了看看任何人有什么想法。

【问题讨论】:

    标签: multiple-columns ls


    【解决方案1】:

    paste &lt;(ls -1 *.inp) &lt;(ls -1 *.dat)diff -y &lt;(ls -1 *.inp) &lt;(ls -1 *.dat) 都满足了我的要求。然后我最终想要更多......

    不过,使用这两种解决方案都解决了最初的问题,我现在对此感到满意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 2014-06-30
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多