#awk
#awk
Вопрос:
У меня есть файл со следующей структурой:
Ввод
1 30923 2 300 G:0.503333 T:0.496667 T
1 51476 2 300 T:0.986667 C:0.0133333 C
1 51479 2 300 T:0.966667 A:0.0333333 T
Что я хотел бы сделать, так это изменить положение пятого и шестого столбцов таким образом, чтобы один столбец получил порядок, идентичный порядку седьмого столбца. Вы можете видеть в примере. В седьмом столбце у нас есть T, C, T, и после изменения шестой столбец из T, C, A изменился на T, C, T в выходных данных, то есть в третьей строке положение пятого и шестого столбцов изменилось по сравнению с седьмым колонна.
Вывод
1 30923 2 300 G:0.503333 T:0.496667 T
1 51476 2 300 T:0.986667 C:0.0133333 C
1 51479 2 300 A:0.0333333 T:0.966667 T
Надеюсь, я смог четко объяснить, я не смог найти решение, не могли бы вы дать мне подсказку, как это сделать?
Заранее благодарю вас.
Комментарии:
1. Итак, вы всегда хотите, чтобы 6-й столбец следовал порядку 7-го столбца?
2. По сути, я хочу изменить порядок одного из 5-го или 6-го столбца, чтобы он имел точно такой же порядок букв, что и в 7-м столбце, неважно, является ли это 5-м или 6-м. Спасибо.
3. Как вы ожидаете решить, какой из столбцов изменить порядок? И вы всегда будете просто заменять значение другим столбцом, чтобы это произошло?
4. кроме того, что происходит, когда ни один из двух столбцов не соответствует последнему столбцу?
Ответ №1:
Использование выходных данных в качестве разделителей табуляции и выравнивание всех столбцов.
awk -F'[ :]*' '{if($7 == $9 ) print $1,$2,$3,$4,$5,$6,$7,$8,$9; else print $1,$2,$3,$4,$7,$8,$5,$6,$9}' input.txt|column -t
Вывод:
1 30923 2 300 G 0.503333 T 0.496667 T
1 51476 2 300 T 0.986667 C 0.0133333 C
1 51479 2 300 A 0.0333333 T 0.966667 T
Комментарии:
1. Это отлично работает. Только один вопрос, как я могу сделать вывод однородным, то есть все строки печатаются как третья, так, как вы удалили «:». Я бы также напечатал столбцы в формате, разделенном табуляцией. Большое вам спасибо.
Ответ №2:
Если я правильно понимаю, может быть, это сработает для вас?
: файл a.awk
substr($6,1,1) == $7 { print }
substr($6,1,1) != $7 { print $1, $2, $3, $4, $6, $5, $7 }
: файл a.txt
1 30923 2 300 G:0.503333 T:0.496667 T
1 51476 2 300 T:0.986667 C:0.0133333 C
1 51479 2 300 T:0.966667 A:0.0333333 T
bash-3.2 $ awk -f a.awk a.txt
1 30923 2 300 G:0.503333 T:0.496667 T
1 51476 2 300 T:0.986667 C:0.0133333 C
1 51479 2 300 A:0.0333333 T:0.966667 T