1 votes

Mise en boîte de deux fichiers après chaque 12 lignes dans le système hp-ux

J'ai deux grands fichiers, l'un contient 0-12 heures de données et l'autre 13-23 heures de données. Je veux les fusionner en un seul fichier avec 23-0 heures pour chaque combinaison.

ex :
file1

abcdefg00
abcdefg01
abcdefg02
---------
---------
abcdefg12
pqrstuv00
---------
---------

file2 :

abcdefg13
abcdefg14
---------
---------
abcdefg23
pqrstuv13
---------
---------

Y a-t-il un moyen pour que je puisse fusionner comme ça ? Le résultat devrait être comme ci-dessous.

>     abcdefg00
>     abcdefg01
>     abcdefg02
>     ---------
>     ---------
>     abcdefg12
>     abcdefg13
>     abcdefg14
>     ---------
>     ---------
>     abcdefg23
>     pqrstuv00
>     ---------
>     ---------
>     pqrstuv13
>     ---------
>     ---------
>     pqrstuv23

Merci d'avance

0voto

Ira Points 1

Si vous demandez d'ajouter les deux fichiers, l'un après l'autre, mais aussi d'inverser l'ordre des lignes, vous pouvez utiliser l'une ou l'autre des méthodes suivantes tail -r o tac dans le cas de

cat file1 file2 | tail -r

o

cat file1 file2 | tac

L'option -r peut ne pas être disponible sur HP-UX. tail . La commande tac fait partie de coreutils si vous avez besoin de l'ajouter.

0voto

Hastur Points 17791

Vous pouvez essayer d'utiliser sort

sort -n -k1 f1.txt f2.txt   > newfile

de man sort vous pouvez le lire sort

Ecrit la concaténation triée de tous les FILE(s) sur la sortie standard.

Vous devrez peut-être sélectionner la colonne utilisée pour le tri ( -k1 ) ou pour sélectionner un type de numérotation -n .

Si vos fichiers ne sont pas strictement ordonnés, vous devriez faire un script qui lit 12 lignes alternativement du premier et du deuxième fichier avec deux descripteurs de fichier [ 1 ],[ 2 ] .

Il peut en résulter quelque chose de similaire à celui-ci

#!/bin/bash
while true
do
  for ((i=1;i<=12;i++)); do
    read -r f1 <&3 && echo "$f1" || exit 1
  done
  for ((i=1;i<=12;i++)); do
    read -r f2 <&4 && echo "$f2" || exit 2
  done
done 3<file1 4<file2

Jusqu'à ce qu'il soit possible de le lire, il écrit, sinon il sort avec une valeur d'erreur différente selon qu'il s'agit du premier ou du deuxième cycle.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X