J'ai besoin d'aide pour traiter un fichier contenant plusieurs lignes avec des éléments séparés par des virgules. Le fichier ressemble à celui ci-dessous:

Fichier-1.txt

54, 75, 19, 123, 74, 15, 10, 117 
54, 75, 19, 45, 74, 15, 10, 117 
54, 29, 19, 123, 74, 15, 10, 117 
54, 29, 19, 45, 74, 15, 10, 117  

Je souhaite convertir les valeurs séparées par des virgules de chaque ligne en deux colonnes séparées par une tabulation, comme indiqué ci-dessous:

Fichier de sortie:

54  75
75  19
19  123
123 74
74  15
15  10
10  117

De même, chaque ligne enregistrée dans un fichier séparé nommé avec les premier et dernier chiffres de la ligne d'origine suivis du numéro de ligne comme indiqué ci-dessous

Output_file 1

ABC-54_117-1

54  75
75  19
19  123
123 74
74  15
15  10
10  117

Output_file 2

ABC-54_117-2

54  75
75  19
19  45
45  74
74  15
15  10
10  117 

Et ainsi de suite pour les deux autres lignes également. Ici, dans ce cas, il s'agit de 4 lignes dans un fichier, mais j'ai peu de fichiers avec de nombreuses lignes, qui doivent être traitées de la même manière. J'ai essayé des scripts avec awk, sed mais je ne pouvais pas du tout le casser.

Toute aide serait appréciée.

0
Asha 5 avril 2017 à 13:38

2 réponses

Meilleure réponse

Vous pouvez utiliser ceci awk:

awk -F', +' '{f=$1"_"$NF"_"NR; for (i=1; i<NF; i++){print $i,$(i+1)>f}}' OFS='\t' file

Production:

$ ls
54_117_1  54_117_2  54_117_3  54_117_4

$ cat 54_117_2
54  75
75  19
19  45
45  74
74  15
15  10
10  117
3
sat 5 avril 2017 à 11:29

La solution complète serait:

awk -F, '{ cnt++;for (i=1;i<=7;i++) { system("echo \""$i" "$(i+1)"\" >> \"ABC-"$1"_"gensub(" ","","g",$8)"_"cnt"\"") } }' File-1.txt

Nous avons le premier incrément cnt pour chaque enregistrement dans File-1.txt. Nous savons qu'il y a 8 champs délimités par des virgules dans chaque ligne, nous utilisons donc une boucle for avec 8 itérations et à l'intérieur de la boucle, nous utilisons la commande système pour renvoyer les paires de variables dans un fichier construit avec la variable cnt et le 8ème champ délimité. La fonction gensub est utilisée pour supprimer tous les espaces dans le 8ème champ.

0
Raman Sailopal 5 avril 2017 à 12:13