我有两个大文件。一个文件包含 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 -r
或tac
如下
cat file1 file2 | tail -r
或者
cat file1 file2 | tac
-r 选项可能在 HP-UX 上不可用tail
。tac
如果您需要添加该命令,则它是 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 个循环)。