добавление по определенному значению арифметических значений, представленных в файле1, в файл2

Я решил интерпретировать этот вопрос как вопрос о переносимости команд и оболочек в различных дистрибутивах Linux. «Командная строка» может означать как «команду, написанную в приглашении оболочки», так и «саму оболочку». Надеюсь, этот ответ касается обеих этих интерпретаций «командной строки».


Большинство систем Unix предоставляют одни и те же базовые утилиты для работы в командной строке. Эти утилиты работают в основном одинаково, поскольку они стандартизированы. Кроме того, синтаксис, используемый для написания команд оболочки, стандартизирован (циклы, перенаправления, конвейеры, фоновые процессы, присвоение переменных, заключение в кавычки и т. д. )Стандарт называется POSIX, и его можно найти здесь(см. Раздел «Оболочка и утилиты» ).

В большинстве систем Unix (, особенно в Linux, по какой-то причине )стандартные утилиты были расширены дополнительными функциями, но функциональные возможности, описанные стандартом POSIX , должны быть реализованы. Если стандартная утилита не соответствует стандарту POSIX, вам, вероятно, следует отправить отчет об ошибке.

В частности, сама оболочка часто расширяется, чтобы обеспечить более удобный интерактивный опыт или предоставить более продвинутые средства программирования оболочки. Оболочка, будучи таким же приложением, как и любое другое, поставляется в различных вариантах (реализациях )и bashявляется наиболее популярной в системах Linux (, но она также доступна в качестве оболочки по умолчанию, например. macOS и может быть установлена ​​на любой Unix ). Оболочки zshи kshтакже популярны и предоставляют различные наборы расширений, но все они должны по крайней мере быть в состоянии делать в основном то, что говорит стандарт POSIX, используя общий синтаксис (, за исключением случаев использования расширения, такие как специальные типы массивов и более причудливые формы сопоставления имен файлов с образцом и т. д., хотя некоторые из них также довольно похожи между оболочками ).

Что касается нестандартных -инструментов, таких как инструменты для выполнения некоторых конкретных задач, которые не охвачены стандартом POSIX (, таких как общение с базой данных или регулировка уровня яркости монитора ), или которые относятся к конкретному дистрибутиву Linux (, возможно, для выполнения управления пакетами ), к версии конкретного дистрибутива Linux или к конкретной аппаратной архитектуре и т. д., переносимость команды будет зависеть от правильного варианта и версия инструмента, устанавливаемого в системе, поддерживающей использование этого инструмента.

В различных дистрибутивах Linux набор доступных инструментов и утилит довольно однороден, а переносимость в целом хорошая (с той оговоркой, что инструменты для конкретных дистрибутивов и архитектур могут отличаться или отсутствовать ). При рассмотрении использования и написания сценариев, которые должны работать на других типах систем Unix, становится более важным знать, какие расширения являются специфическими для вариантов инструментов и утилит GNU/Linux, и что можно ожидать от «общего применения». Система POSIX/Unix».

0
05.01.2021, 20:52
2 ответа

Этот awk скрипт берет второе поле данных и разбивает его на переменные, которые можно использовать в математической операции:

$ cat data
'a 62-182'
'a 183-303'
'a 304-424'


$ awk '{ split($2,arr,"-");
  print $0"\t"$1, arr[1] + 7133 "-" arr[2] + 7133"\047" }' data
'a 62-182'  'a 7195-7315'
'a 183-303' 'a 7316-7436'
'a 304-424' 'a 7437-7557'
2
18.03.2021, 22:39
awk '{gsub("-"," ",$0);print $1,$2"-"$3" "$1,$2+7133"-"$3+7133"'\''"}' filename

выход

'a 62-182' 'a 7195-7315'
'a 183-303' 'a 7316-7436'
'a 304-424' 'a 7437-7557'

Питон

#!/usr/bin/python
import re
k=open ('p','r')
for i in k:
    d=i.strip().replace('-',' ').replace("'","").split(' ')
    print "'"+d[0]+" "+d[1]+"-"+d[2]+"'  "+"'"+d[0],str(int(d[1])+7133)+"-"+str(int(d[2])+7133)+"'"
0
18.03.2021, 22:39

Теги

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