1

У меня есть два больших файла. Один файл содержит 0-12 часов данных, а другие содержат 13-23 часа данных. Я хочу объединить его в один файл с 23-0 часами для каждой комбинации.

ex :
file1

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

file2 :

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

Есть ли способ, которым я могу слиться, как это. вывод должен быть как ниже

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

Спасибо заранее

2 ответа2

0

Если вы просите добавлять два файла один за другим, но также для изменения порядка строк, вы можете использовать tail -r или tac как в

cat file1 file2 | tail -r

или же

cat file1 file2 | tac

Опция -r может быть недоступна на tail HP-UX. Команда tac является частью coreutils, если вам нужно ее добавить.

0

Вы можете попробовать использовать sort

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

от man sort вы можете прочитать, что- sort

Записывает отсортированное объединение всех ФАЙЛОВ в стандартный вывод.

Вам может потребоваться выбрать столбец, используемый для сортировки (-k1) или выбрать сортировку нумерации -n .

Если ваши файлы не упорядочены строго, вы должны сделать скрипт, который поочередно читает 12 строк из первого и второго файла с двумя файловыми дескрипторами [ 1 ], [ 2 ].

Это может привести к чему-то похожему на это

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

До тех пор, пока он не сможет прочитать, пишет, иначе он выйдет с другим значением ошибки, если из 1-го или 2-го цикла.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .