Как мне преобразовать вывод из ls в столбцы или таблицу? (Желательно "без файла") - PullRequest
0 голосов
/ 22 января 2020

Скажем, у меня есть папка с диапазоном входных / выходных файлов, и я хочу поместить входные файлы в один столбец, а выходные файлы - в другой столбец рядом с первым, чтобы сравнить их:

$ 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.

Я собираюсь закрыть эту топи c, поскольку у меня есть кое-что, что работает прямо сейчас, но не совсем так, как я себе это представлял. Хотя я оставлю это открытым еще ненадолго, потому что у кого-то есть идеи.

1 Ответ

0 голосов
/ 22 января 2020

Либо paste <(ls -1 *.inp) <(ls -1 *.dat), либо diff -y <(ls -1 *.inp) <(ls -1 *.dat) сделал то, что я просил. Тогда я в конечном итоге захотел еще больше ...

Тем не менее, исходная проблема была решена с использованием любого решения, и я доволен этим на данный момент.

...