Вот ваш код, расширенный для видимости:
awk ' { if (! ($ 1 ~ / rs / || $ 1 ~ / chr /)) { ($ 1 == "chr" $ 1); print $ 0} }; {{1 }} else {print $ 0} 'filename> newfilename
Здесь возникает ряд проблем, которые приходят на ум
chr
стоит посторонний }
print $ 0
else
частью }
после кода Вот фиксированная версия, все еще расширено:
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