在 hp-ux 系统中,每 12 行合并两个文件

在 hp-ux 系统中,每 12 行合并两个文件

我有两个大文件。一个文件包含 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

提前致谢

答案1

如果您要求将两个文件一个接一个地附加,但也要反转行的顺序,则可以使用tail -rtac如下

cat file1 file2 | tail -r

或者

cat file1 file2 | tac

-r 选项可能在 HP-UX 上不可用tailtac如果您需要添加该命令,则它是 coreutils 的一部分。

答案2

您可以尝试使用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 个循环)。

相关内容