Данные в моем файле хранятся в столбцах. Эти столбцы содержат определенные значения, разделенные символом «:». Я хочу обновить значение, если есть канал '|' в 6-й или 8-й колонке.Как объединить данные двух строк awk-кода в одну строку?
Линия моих данных выглядит следующим образом:
0/1:38,59:97:99:.:.:2015,0,1366:0|1:.,.,.,.,.,.,.,.,.,.,.,.,.,.:1311:|:0.5 0/1:89,56:145:99:0|1:5238_G_C:2074,0,5187:.:.:.:.:. 0/1:31,65:96:99:.:.:2208,0,1170:.:.:.:.:. 0/1:58,74:132:99:.:.:2457,0,1761:.:.:.:.:.
Во входном файле есть труба в первой колонке на 8-ой области. Таким образом, значение 1-го поля обновляется значением в восьмом поле. Там будет труба либо на 6-м, либо на 8-м поле не на обоих. Труба в других местах не имеет значения. Для приведенного выше входа ожидаемый выход:
0|1:38,59:97:99:.:.:2015,0,1366:0|1:.,.,.,.,.,.,.,.,.,.,.,.,.,.:1311:|:0.5 0/1:89,56:145:99:0|1:5238_G_C:2074,0,5187:.:.:.:.:. 0/1:31,65:96:99:.:.:2208,0,1170:.:.:.:.:. 0/1:58,74:132:99:.:.:2457,0,1761:.:.:.:.:.
И, У меня есть следующий код:
Сначала я обновить значение из 6 поля
awk 'BEGIN{FS=OFS="\t"} {for (i=1;i<=NF;i++) { split($i,f,/:/); if (f[6]~/\|/) sub(/^[^:]+/,f[6],$i) } }1' 2ms01e_only.pHASER01.vcf > 2ms01e_PG_6th.pHASER01.vcf
, а затем обновить значение с 8-й позиции
awk 'BEGIN{FS=OFS="\t"} {for (i=1;i<=NF;i++) { split($i,f,/:/); if (f[8]~/\|/) sub(/^[^:]+/,f[8],$i) } }1' 2ms01e_PG_6th.pHASER01.vcf > 2ms01e_PG_transfered.pHASER01.vcf
Как я могу написать код выше (две отдельные линии) в качестве одной линии? Таким образом, я могу обновить значение в первом поле, если есть канал в 6-м или 8-м поле. btw, обновленное значение вытягивается из 6-го или 8-го полей. Данный код делает то, что я хочу сделать, но я должен сделать это два раза. Я просто хочу, чтобы код был одной строкой.
Спасибо,
Добавить ожидаемый результат для вашего ввода. – Inian
Каков ваш ожидаемый результат? – Inian
Ваша логика 'awk' не делает то, что вы намереваетесь сделать. Укажите ожидаемый результат для лучшего решения. – Inian