Eh bien, j’ai le fichier suivant:
12721 2 2 2 1 1 2 1 2 1 1 1 2 2 1 1 2 1 2 1 1 2 12722 2 2 2 1 1 2 1 2 1 1 1 2 2 1 1 2 1 2 1 1 2 12734 2 2 2 1 1 2 1 2 1 1 1 2 2 1 1 2 1 2 1 1 2 12753 2 2 2 1 1 2 1 2 1 1 1 2 2 1 1 2 1 2 1 1 2 12756 2 2 2 1 1 2 1 2 1 1 1 2 2 1 1 2 1 2 1 1 2
Je dois supprimer les espaces à partir de la deuxième colonne, pour que mon fichier ressemble à ceci:
12721 222112121112211212112 12722 222112121112211212112 12734 222112121112211212112 12753 222112121112211212112 12756 222112121112211212112
J’ai essayé cette commande pour remplacer:
sed '1,$s/ //g' snpdata > snpdata1
ça n’a pas marché et je l’ai eu:
12721222112121112211212112 12722222112121112211212112 12734222112121112211212112 12753222112121112211212112 12756222112121112211212112
des suggestions à remplacer à partir de la deuxième colonne?
Remarque: mon jeu de données d’origine comporte des milliers de colonnes et de lignes.
EDIT: Puisque l’OP a modifié la sortie attendue maintenant, le code a donc un peu modifié le code, cela devrait aider OP pour la dernière sortie attendue.
awk '{val=$1;$1="";gsub(/[[:space:]]+/,"");print val,$0}' Input_file
Après awk
peut vous aider ici.
awk '{val=substr($0,5);gsub(/ +/,"",val);print substr($0,1,4), val;val=""}' Input_file
Utiliser sed:
sed 's/ //g;s/\([0-9]\{5\}\)\([0-9]\+\)/\1 \2/' file
où la première commande supprime tous les espaces et la deuxième commande groupe les chiffres
Cela pourrait fonctionner pour vous (GNU sed):
sed 's/\([^ ]\) */\1\n/1;s/ //g;s/\n/ /' file
Remplacez le premier ensemble d’espaces après une colonne par une nouvelle ligne. Supprimez tous les autres espaces. Remplacez la nouvelle ligne par un espace.