Как разделить два столбца из двух разных текстовых файлов в Bash

Лучший способ ответить на ваш вопрос, как сказал Джефф Шаллер, чтобы посмотреть на исходный код. Вы можете получить последнюю версию с помощью:

git clone https://anonscm.debian.org/cgit/aptitude/aptitude.git

, а затем посмотреть на появление подробный последовательностей.

cd aptitude/src
grep -R verbose *

Вы получаете следующие выходные данные:

cmdline/cmdline_action.cc:              int verbose,
cmdline/cmdline_action.cc:                      verbose,
cmdline/cmdline_action.cc:                      verbose,
cmdline/cmdline_action.cc:           int verbose,
cmdline/cmdline_action.cc:            if(verbose>0)
cmdline/cmdline_action.cc:            if(verbose>0)
cmdline/cmdline_action.cc:  if (verbose > 0)
cmdline/cmdline_action.cc:  if (verbose > 0)
cmdline/cmdline_action.cc:    if (verbose > 0)
cmdline/cmdline_action.cc:  if (verbose > 0)
cmdline/cmdline_action.cc:  if (verbose > 0)
cmdline/cmdline_action.cc:    if (verbose > 0)
cmdline/cmdline_action.cc:        if (verbose > 0)
cmdline/cmdline_action.cc:                    verbose,
cmdline/cmdline_action.cc:           int verbose,
cmdline/cmdline_action.cc:                                   verbose, source,
cmdline/cmdline_action.cc:                      verbose,
cmdline/cmdline_action.cc:               verbose, source,
cmdline/cmdline_action.cc:                verbose, source,
cmdline/cmdline_action.cc:            int verbose,
cmdline/cmdline_action.cc:                    verbose, policy,
cmdline/cmdline_simulate.cc:             bool always_prompt, int verbose,
cmdline/cmdline_simulate.cc:            always_prompt, verbose,
cmdline/cmdline_simulate.cc:  if(verbose==0)
cmdline/cmdline_show.cc:                       int verbose,
cmdline/cmdline_show.cc:static void show_package(pkgCache::PkgIterator pkg, int verbose,
cmdline/cmdline_show.cc:  fragments.push_back(prv_lst_frag(pkg.ProvidesList(), true, verbose, _("Provided by")));
cmdline/cmdline_show.cc:                    int verbose)
cmdline/cmdline_show.cc:  if (verbose>0)
cmdline/cmdline_show.cc:      if(verbose<2) // Show all archives in a list.
cmdline/cmdline_show.cc:  fragments.push_back(prv_lst_frag(ver.ProvidesList(), false, verbose, _("Provides")));
cmdline/cmdline_show.cc:  fragments.push_back(prv_lst_frag(ver.ParentPkg().ProvidesList(), true, verbose, _("Provided by")));
cmdline/cmdline_show.cc:static void show_version(pkgCache::VerIterator ver, int verbose,
cmdline/cmdline_show.cc:      cw::fragment *f=version_file_fragment(ver, ver.FileList(), verbose);
cmdline/cmdline_show.cc:      cw::fragment *f=version_file_fragment(ver, vf, verbose);
cmdline/cmdline_show.cc:      // If verbose<2, only show the first file.
cmdline/cmdline_show.cc:      if(verbose<2)
cmdline/cmdline_show.cc:                int verbose,
cmdline/cmdline_show.cc:  if(verbose == 0 || has_explicit_source)
cmdline/cmdline_show.cc:    show_version(ver, verbose, term_metrics);
cmdline/cmdline_show.cc:    show_package(pkg, verbose, term_metrics);
cmdline/cmdline_show.cc:      show_version(ver, verbose, term_metrics);
cmdline/cmdline_show.cc:    show_package(pkg, verbose, term_metrics);
cmdline/cmdline_show.cc:bool do_cmdline_show(const string& s, int verbose, const std::shared_ptr<terminal_metrics> &term_metrics)
cmdline/cmdline_show.cc:                                  verbose,
cmdline/cmdline_show.cc:                                     verbose,
cmdline/cmdline_show.cc:int cmdline_show(int argc, char *argv[], int verbose)
cmdline/cmdline_show.cc:    if(!do_cmdline_show(argv[i], verbose, term))
cmdline/cmdline_moo.cc:int cmdline_moo(int argc, char *argv[], int verbose)
cmdline/cmdline_moo.cc:  switch(verbose)
cmdline/cmdline_moo.h:int cmdline_moo(int argc, char *argv[], int verbose);
cmdline/cmdline_why.h:     *  \param verbosity  How verbose the search should be (if set to a value
cmdline/cmdline_util.h: *  \param verbose  the verbosity level; controls how many
cmdline/cmdline_util.h:                      int verbose,
cmdline/cmdline_user_tag.cc:            int verbose,
cmdline/cmdline_user_tag.cc:    if (operation_result && verbose>0)
cmdline/cmdline_user_tag.cc:               int verbose)
cmdline/cmdline_user_tag.cc:    print_result(act, tag, pkg, verbose, op_result);
cmdline/cmdline_user_tag.cc:    int cmdline_user_tag(int argc, char *argv[], int quiet, int verbose)
cmdline/cmdline_user_tag.cc:          bool result = do_user_tag(action, tag, pkg, verbose);
cmdline/cmdline_user_tag.cc:              bool result = do_user_tag(action, tag, pkg, verbose);
cmdline/cmdline_do_action.h:              int verbose);
cmdline/cmdline_update.cc:int cmdline_update(int argc, char *argv[], int verbose)
cmdline/cmdline_update.cc:    (cmdline_do_download(&m, verbose, term, term, term, term)
cmdline/cmdline_util.cc:                         int verbose,
cmdline/cmdline_util.cc:            verbose >= 1, verbose >= 2,
cmdline/cmdline_show.h: *  \param verbose  How much information to render (scale of 0 to 2 inclusive).
cmdline/cmdline_show.h:                  int verbose);
cmdline/cmdline_show.h:          int verbose,
cmdline/cmdline_show.h:int cmdline_show(int argc, char *argv[], int verbose);
cmdline/cmdline_action.h: *  \param verbose The verbosity level at which this command should
cmdline/cmdline_action.h:            int verbose,
cmdline/cmdline_action.h: *  \param verbose The verbosity level at which this command should
cmdline/cmdline_action.h:            int verbose,
cmdline/cmdline_action.h: *  \param verbose The verbosity level at which this command should
cmdline/cmdline_action.h:             int verbose,
cmdline/cmdline_do_action.cc:             bool queue_only, int verbose)
cmdline/cmdline_do_action.cc:                            verbose, policy, arch_only, pass > 0,
cmdline/cmdline_do_action.cc:      if(!aptitude::cmdline::safe_resolve_deps(verbose,
cmdline/cmdline_do_action.cc:               always_prompt, verbose, assume_yes,
cmdline/cmdline_do_action.cc:               always_prompt, verbose, assume_yes,
cmdline/cmdline_do_action.cc:   (cmdline_do_download(&m, verbose, term, term, term, term)
cmdline/cmdline_prompt.cc:             int verbose,
cmdline/cmdline_prompt.cc:      make_cmdline_why_callbacks(verbose, term_metrics);
cmdline/cmdline_prompt.cc:    if(verbose > 1)
cmdline/cmdline_prompt.cc:    else if(verbose > 0)
cmdline/cmdline_prompt.cc: *  \param verbose controls various aspects of how verbose the list is.
cmdline/cmdline_prompt.cc:                int verbose,
cmdline/cmdline_prompt.cc:    std::string whystring(roots_string(*i, verbose, term_metrics));
cmdline/cmdline_prompt.cc:            int verbose,
cmdline/cmdline_prompt.cc:              verbose,
cmdline/cmdline_prompt.cc:      cmdline_show_instinfo(recommended, verbose, showvers, showdeps, showsize, false, showwhy, term_metrics);
cmdline/cmdline_prompt.cc:  if(verbose>0 && !suggested.empty())
cmdline/cmdline_prompt.cc:      cmdline_show_instinfo(suggested, verbose, showvers, showdeps, showsize, false, showwhy, term_metrics);
cmdline/cmdline_prompt.cc:  if (verbose>0 && ! not_upgraded.empty())
cmdline/cmdline_prompt.cc:      cmdline_show_instinfo(not_upgraded, verbose, showvers, showdeps, showsize, false, showwhy, term_metrics);
cmdline/cmdline_prompt.cc:                 int verbose,
cmdline/cmdline_prompt.cc:      do_cmdline_show(*it, verbose, term_metrics);
cmdline/cmdline_prompt.cc:             int verbose,
cmdline/cmdline_prompt.cc:                 showvers, showdeps, showsize, showwhy, verbose,
cmdline/cmdline_prompt.cc:                    verbose,
cmdline/cmdline_prompt.cc:                     verbose, term_metrics);
cmdline/cmdline_prompt.cc:        cmdline_parse_show(response, verbose, term_metrics);
cmdline/cmdline_prompt.cc:                   to_remove, to_purge, verbose,
cmdline/cmdline_user_tag.h:    int cmdline_user_tag(int argc, char *argv[], int quiet, int verbose);
cmdline/cmdline_simulate.h: *  \param verbose the current verbosity level
cmdline/cmdline_simulate.h:          bool always_prompt, int verbose,
cmdline/cmdline_prompt.h: *  \param verbose the current verbosity level
cmdline/cmdline_prompt.h:              int verbose,
cmdline/cmdline_prompt.h:             int verbose,
cmdline/cmdline_resolver.h: *  \param verbose the verbosity level set by the user
cmdline/cmdline_resolver.h:          int verbose,
cmdline/cmdline_resolver.h:     *  \param verbose   The verbosity level (increase to get more
cmdline/cmdline_resolver.h:    bool safe_resolve_deps(int verbose,
cmdline/cmdline_resolver.cc:             int verbose,
cmdline/cmdline_resolver.cc:                       to_remove, to_purge, verbose,
cmdline/cmdline_resolver.cc:    bool safe_resolve_deps(int verbose,
cmdline/cmdline_update.h:int cmdline_update(int argc, char *argv[], int verbose);
main.cc:  {"verbose", 0, NULL, 'v'},
main.cc:  int verbose=aptcfg->FindI(PACKAGE "::CmdLine::Verbose", 0);
main.cc:      ++verbose;
main.cc:        return cmdline_update(argc-optind, argv+optind, verbose);
main.cc:                   status_fname, verbose,
main.cc:                   status_fname, verbose,
main.cc:                       arch_only, queue_only, verbose);
main.cc:                               quiet, verbose);
main.cc:        return cmdline_moo(argc-optind, argv+optind, verbose);
main.cc:        return cmdline_show(argc-optind, argv+optind, verbose);

Мы видим, что подробная переменная увеличивается в main.cc:

// Read the arguments:
  while((curopt=getopt_long(argc, argv, "DVZWvhS:uiF:w:sO:fdyPt:q::Rro:", opts, NULL))!=-1)
    {
      switch(curopt)
        {
             //Other options

             case 'v':
               ++verbose;
               break;

             //Other options

Это означает, что каждый раз v появляется в параметрах из командной строки verbose увеличивается на 1. Но максимальное значение литерала, по которому проверяется verbose , равно 2 в verbose > = 2 . Это означает, что наличие более -vv в командной строке бесполезно.

Отредактируйте

Подробнее см. в разделе cmdline_show.h

*  \param verbose  How much information to render (scale of 0 to 2 inclusive).
1
30.10.2018, 04:59
1 ответ

Если под делением вы подразумеваете математическую операцию деления, попробуйте следующее:

paste inf1 inf2 | awk '{print($1/$2)}'

Предполагается, что inf1и inf2— это два файла с одним столбцом чисел, что-то вроде:

$ seq 10 30 > inf1
$ seq  2 22 > inf2
$ paste inf1 inf2 | awk '{print($1/$2)}'
5
3.66667
3
2.6
2.33333
2.14286
2
1.88889
1.8
1.72727
1.66667
1.61538
1.57143
1.53333
1.5
1.47059
1.44444
1.42105
1.4
1.38095
1.36364

Если вам нужен определенный формат, используйте printfвместо print.

Если это должно выполняться в оболочке (bash-коде, при необходимости можно преобразовать):

$ readarray -t a <inf1
$ readarray -t b <inf2
$ for ((i=0;i<${#a[@]};i++)); do
      printf '%8.4f\n' "$((10000000*a[i]/b[i]))e-7"
done
  5.0000
  3.6667
  3.0000
  2.6000
  2.3333
  2.1429
  2.0000
  1.8889
  1.8000
  1.7273
  1.6667
  1.6154
  1.5714
  1.5333
  1.5000
  1.4706
  1.4444
  1.4211
  1.4000
  1.3810
  1.3636
2
27.01.2020, 23:31

Теги

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