манипуляция awk

У меня есть такой файл

SRR959756.1081725 1 RNU2-54P:112:133:hsa-miR-1246 SRR959756.1162547 1 RNU2-54P:112:133:hsa-miR-1246 SRR959756.128602 2 RNU2-37P:85:108:hsa-miR-877-3p RNU2-59P:99:122:hsa-miR-877-3p 

Это файл с разделяемой вкладкой, где я хочу получить результат, подобный этому

 SRR959756.1081725 1 RNU2-54P:112:133:hsa-miR-1246 SRR959756.1162547 1 RNU2-54P:112:133:hsa-miR-1246 SRR959756.128602 2 RNU2-37P:85:108:hsa-miR-877-3p SRR959756.128602 2 RNU2-59P:99:122:hsa-miR-877-3p 

Так что, как и в третьей строке, у меня есть 3-й и 4-й столбцы. Но 1-й и 2-й столбцы всегда должны быть напечатаны, а затем 3-й столбец, затем в следующей строке 1-й и 2-й столбцы, а затем 4-й столбец.

Как я могу сделать это в awk

2 Solutions collect form web for “манипуляция awk”

 $ awk -v OFS='\t' '{for (i=3;i<=NF;i++)print $1,$2,$i}' file SRR959756.1081725 1 RNU2-54P:112:133:hsa-miR-1246 SRR959756.1162547 1 RNU2-54P:112:133:hsa-miR-1246 SRR959756.128602 2 RNU2-37P:85:108:hsa-miR-877-3p SRR959756.128602 2 RNU2-59P:99:122:hsa-miR-877-3p 

Как это работает

  • -v OFS='\t'

    Это устанавливает разделитель выходного поля, AKA OFS , на вкладку.

  • for (i=3;i<=NF;i++) print $1,$2,$i

    Это запускает цикл, начинающийся со столбца 3 и всех столбцов после и печатает их в строке, предшествующей столбцам 1 и 2.

 awk '{print $1,$2,$3}$4{print $1,$2,$4}' 

==

 awk '{print $1,$2,$3;$3="\b"}$4' 

или

 awk -v OFS="\t" '$4{$4="\n"$1"\t"$2"\t"$4}1' 

==

 awk -v OFS="\t" '$4{sub("^","\n"$1"\t"$2"\t",$4)}1' 

Если вы хотите отформатированный вывод, вы можете использовать либо переменную OFS по -v OFS='\t' либо вывод трубы через column -t

  • Измените текст в теге, но только тег содержится в определенном блоке XML
  • Замените определенные строки на значение из предыдущей строки
  • Как читать первую и последнюю строку от выхода cat?
  • Как распечатать инкрементное количество входов уникальных значений в столбце 1
  • Отрегулируйте зазор между двумя столбцами, чтобы заставить их смотреть прямо
  • Заменить команду как переменную в скрипт bash
  • Печатать текст между (и включая) двумя разделителями по строке
  • Обработать последнюю строку сначала с помощью awk
  • повторить строку, разделив одно поле
  • Замена одной тестовой строки на другую в определенном столбце
  • Как отформатировать число с плавающей запятой с точностью до 2 значащих цифр в bash?
  • Linux и Unix - лучшая ОС в мире.