Умножение цифр внутри чисел на основе положения цифры

grep -E '^([^#].*)?app' ./infiles* /dev/null

Думаю, в комментариях оно уже почти было, но если вы сделаете заголовок строки [^ #] совпадение без комментариев ? необязательно, тогда вы либо получите строки, которые начинаются с соответствия app , либо вы получите строки, которые начинаются с чего-то еще, а затем в конечном итоге соответствуют app - но в любом случае , вы не получите строк, начинающихся с # .

Что касается цветов - ну ... это зависит от grep и регулярного выражения, но стандартный GNU grep должен выделять все совпадение до последнего совпадения app . Если вам нужен более конкретный вариант, вы можете выполнить info grep , чтобы посмотреть, какие переменные среды GNU grep будет учитывать при их выделении и настройке надлежащим образом или при отсутствии удовлетворительного результата в этом ключе выделите это сами.

-1
14.10.2018, 01:38
4 ответа

Вы можете попробовать этот простойmawk(подход без внутренней сортировки )(, который можно улучшить после некоторой доработки):

awk  '{print $6 * $7, $0 | ("sort -n > TMP" )} END {close ("TMP"); FS = " "; while (1 == getline < "TMP") print $2}' FS="" file
3245321343456
3453212332345
1234532153457
1234532444568
1324532449876
2345453326780
1324354532376
0987656787689
0
28.01.2020, 05:07

Использованиеawk:

$ awk '{ print substr($0,6,1)*substr($0,7,1) }' <file
30
15
2
6
6
2
20
6

Сортировка исходных чисел на основе приведенного выше результата (это был дополнительный вопрос в комментарии):

$ awk '{ print substr($0,6,1)*substr($0,7,1) }' <file | paste - file | sort -n | cut -f 2
3245321343456
3453212332345
1234532153457
1234532444568
1324532449876
2345453326780
1324354532376
0987656787689

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

1
28.01.2020, 05:07

Перл спешит на помощь!

perl -F// -lane 'print $F[5] * $F[6]' < file
  • -nсчитывает ввод построчно
  • -aразбивает каждую строку на массив @F
  • -Fрассказывает, как разделить
  • //означает разбить везде, т.е. на отдельные символы
  • -lудаляет новые строки из ввода и добавляет их в вывод
1
28.01.2020, 05:07

Использование GNU awk для гибкой сортировки:

function compare_product(i1, v1, i2, v2) {
  return substr(v1, 6, 1) * substr(v1, 7, 1) - \
         substr(v2, 6, 1) * substr(v2, 7, 1);
}

BEGIN {
  PROCINFO["sorted_in"]="compare_product";
}

{
  elements[NR]=$0
}

END {
  asort(elements, sorted_elements, "compare_product");
  for (element in sorted_elements) {
    print sorted_elements[element];
  }
}

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

1
28.01.2020, 05:07

Теги

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