История Bash усекается, даже если HISTSIZE и HISTFILESIZE не установлены

Файл3 не совсем корректен с моей точки зрения, так как строка

5811151 12

может иметь число "12" во втором или третьем столбце, в зависимости от того, как мы читаем файл (разделитель столбцов не определен и не везде одинаков ).

В любом случае.

a=$(cat file1|awk '{if($2==""){$2="0"};if($3==""){$3="0"}; print $1,$2,$3}'|sort);
for f in file2 file3; do
    b=$(cat $f|awk '{if($2==""){$2="0"};if($3==""){$3="0"}; print $1,$2,$3}'|sort);
    a=$(join -j 1 <(echo "${a}") <(echo "${b}"));
done;
echo "${a}"|sort -n

вывод

sample input filtered chi tri bra doe
5809378 1 2 7 8 11 0
5811151 3 4 0 0 12 0
5811237 5 6 9 10 13 14

Итак, мы

1 )Преобразование каждого взятого файла

cat file|awk '{if($2==""){$2="0"};if($3==""){$3="0"}; print $1,$2,$3}'|sort

заменить отсутствующие числа на «0» и отсортировать строки.

2 )В цикле мы берем следующий файл и объединяем его с предыдущим результатом

join -j 1 file_current file_next

поэтому строка «для f в файле2 файл3; делать» может быть изменена, чтобы включать больше файлов, например, «для f в файле2 файл3 файл4 файл5 файл6; делать».

3 )Распечатайте результат, отсортированный в соответствии с числовым значением строки(для упорядочения и печати имен столбцов первыми ). Также мы можем отформатировать вывод здесь, если это необходимо.

1
24.09.2020, 01:01
0 ответов

Теги

Похожие вопросы