Запуск команды zypper с правами root

Вот ваш код, расширенный для видимости:

 awk '
 {
if (! ($ 1 ~ / rs / || $ 1 ~ / chr /)) 
 {
 ($ 1 == "chr" $ 1); 
print $ 0} 
}; {{1 }} else 
 {print $ 0} 
 'filename> newfilename 
 

Здесь возникает ряд проблем, которые приходят на ум

  1. Вы используете равенство сравнение вместо присваивания, чтобы попытаться добавить префикс chr
  2. Вы заключили то, что должно быть присваиванием, в скобки
  3. После первого стоит посторонний } print $ 0
  4. Не должно быть точки с запятой перед else частью
  5. Вам не хватает окончательного закрытия } после кода

Вот фиксированная версия, все еще расширено:

awk '
    {
        if (! ($1 ~ /rs/ || $1 ~ /chr/) )
        {
            $1 = "chr"$1;
            print $0
        }
        else
        { print $0 }
    }
' filename > newfilename

А затем мы можем увидеть простую оптимизацию, чтобы переместить повторяющийся print $ 0 за пределы вашего условия:

awk '
    {
        if (! ($1 ~ /rs/ || $1 ~ /chr/) )
        {
            $1 = "chr"$1
        }
        print $0
    }
' filename > newfilename

Поскольку это в основном простое «условие → изменить», вы можете использовать стандартная структура awk для упростить это дальше. Здесь у нас есть два оператора awk , которые обрабатываются последовательно для каждой строки вашего входного файла. В первой строке префиксы chr по мере необходимости. Второй печатает каждую строку.

awk '
    (! ($1 ~ /rs/ || $1 ~ /chr/) ) { $1 = "chr"$1 }
    1
' filename > newfilename
1
14.12.2017, 12:49
0 ответов

Теги

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