Imprimer le même mot trouvé dans certaines colonnes alors que les champs vides sont successivement sous UNIX

Ceci est un input.tsv tabulé abrégé

rs928302 YES TMPRSS3 rf GV 53 NM_001256317.1 NP_001243246.1 rf GV 53 NM_024022.2 NP_076927.1 rf GV 53 NM_032405.1 NP_115781.1 rs1046210 YES BACE2 rf CD 364 NM_012105.4 NP_036237.2 rf CD 364 NM_138992.2 NP_620477.1 rf CD 269 XM_017028314.1 XP_016883803.1 rs1064579 YES IFNGR2 rf TV 272 NM_001329128.1 NP_001316057.1 rf TV 253 NM_005534.3 NP_005525.2 rf TV 272 XM_005260969.2 XP_005261026.1 rf TV 278 XM_011529553.1 XP_011527855.1 rf TV 255 XM_011529554.2 XP_011527856.1 

Et je voudrais imprimer dans les champs vides le même mot trouvé en haut et appliquer aux première, deuxième et troisième colonnes jusqu’à la fin du fichier. Lorsqu’il apparaît un mot différent, l’impression ci-dessous devrait être ce nouveau mot et ainsi de suite. Donc, le résultat devrait être:

 rs928302 YES TMPRSS3 rf GV 53 NM_001256317.1 NP_001243246.1 rs928302 YES TMPRSS3 rf GV 53 NM_024022.2 NP_076927.1 rs928302 YES TMPRSS3 rf GV 53 NM_032405.1 NP_115781.1 rs1046210 YES BACE2 rf CD 364 NM_012105.4 NP_036237.2 rs1046210 YES BACE2 rf CD 364 NM_138992.2 NP_620477.1 rs1046210 YES BACE2 rf CD 269 XM_017028314.1 XP_016883803.1 rs1064579 YES IFNGR2 rf TV 272 NM_001329128.1 NP_001316057.1 rs1064579 YES IFNGR2 rf TV 253 NM_005534.3 NP_005525.2 rs1064579 YES IFNGR2 rf TV 272 XM_005260969.2 XP_005261026.1 rs1064579 YES IFNGR2 rf TV 278 XM_011529553.1 XP_011527855.1 rs1064579 YES IFNGR2 rf TV 255 XM_011529554.2 XP_011527856.1 

Comment peut-on le faire dans un environnement Unix? Merci d’avance.

 awk ' BEGIN { FS=OFS="\t" } { for (i=1; i<=3; i++) { if ($i == "") { $i = p[i] } else { p[i] = $i } } print } ' file 

solution awk :

 awk 'NF==9{ f1=$1; f2=$2; f3=$3 } NF==6{ sub(/^[[:space:]]+/,"",$0); $0=f1 OFS f2 OFS f3 OFS $0 }1' OFS='\t' file 

Le résultat:

 rs928302 YES TMPRSS3 rf GV 53 NM_001256317.1 NP_001243246.1 rs928302 YES TMPRSS3 rf GV 53 NM_024022.2 NP_076927.1 rs928302 YES TMPRSS3 rf GV 53 NM_032405.1 NP_115781.1 rs1046210 YES BACE2 rf CD 364 NM_012105.4 NP_036237.2 rs1046210 YES BACE2 rf CD 364 NM_138992.2 NP_620477.1 rs1046210 YES BACE2 rf CD 269 XM_017028314.1 XP_016883803.1 rs1064579 YES IFNGR2 rf TV 272 NM_001329128.1 NP_001316057.1 rs1064579 YES IFNGR2 rf TV 253 NM_005534.3 NP_005525.2 rs1064579 YES IFNGR2 rf TV 272 XM_005260969.2 XP_005261026.1 rs1064579 YES IFNGR2 rf TV 278 XM_011529553.1 XP_011527855.1 rs1064579 YES IFNGR2 rf TV 255 XM_011529554.2 XP_011527856.1