Bater dois arquivos a cada 12 linhas no sistema hp-ux

1

Eu tenho dois arquivos grandes. Um arquivo contém 0 a 12 horas de dados e outro contém de 13 a 23 horas de dados. Eu quero mesclar em um único arquivo com 23-0 horas para cada combinação.

ex :
file1

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

file2 :

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

Existe alguma maneira que eu possa mesclar assim. saída deve ser como abaixo

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

Obrigado por antecipar

    
por kiran 11.03.2016 / 17:20

2 respostas

0

Se você está pedindo para anexar os dois arquivos, um após o outro, mas também para reverter a ordem das linhas, você pode usar tail -r ou tac como em

cat file1 file2 | tail -r

ou

cat file1 file2 | tac

A opção -r pode não estar disponível no HP-UX tail . O comando tac faz parte do coreutils se você precisar adicioná-lo.

    
por 11.03.2016 / 17:41
0

Você pode tentar usar sort

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

de man sort você pode ler que sort

Writes sorted concatenation of all FILE(s) to standard output.

Você pode precisar selecionar a coluna usada para classificar ( -k1 ) ou selecionar uma classificação de numeração -n .

Se os seus arquivos não estiverem estritamente ordenados, você deve fazer um script que leia 12 linhas alternativamente do primeiro e do segundo arquivo com dois descritores de arquivos [ 1 ], [ 2 ] .

Pode resultar em algo semelhante a este

#!/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

Até que seja capaz de lê-lo, ele sai com um valor de erro diferente se for do primeiro ou do segundo ciclo.

    
por 11.03.2016 / 18:59