【发布时间】: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
我认为这可以使用ls 和columns 或其他一些程序/工具的组合来完成。我只是想不出命令和/或管道/重定向的良好组合。我想我可以通过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