Клубить два файла после каждых 12 строк в системе hp-ux
У меня есть два больших файла. Один файл содержит 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 ответа
Если вы хотите добавить два файла один за другим, но также изменить порядок строк, вы можете использовать tail -r
или же tac
как в
cat file1 file2 | tail -r
или же
cat file1 file2 | tac
Параметр -r может быть недоступен в HP-UX tail
, Команда tac
является частью coreutils, если вам нужно добавить его.
Вы можете попробовать использовать 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-го цикла.