微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 合并多个文件,保留unix中的原始序列

我在目录中有多个(超过100个)文本文件,例如

files_1_100.txt
files_101_200.txt

文件内容是一些变量的名称,如files_1_100.txt包含一些介于1到100之间的变量名称

"var.2"
"var.5"
"var.15"

类似地,files_201_300.txt包含101到200之间的一些变量

"var.203"
"var.227"
"var.285"

和files_1001_1100.txt一样

"var.1010"
"var.1006"
"var.1025"

我可以使用命令合并它们

cat files_*00.txt > ../all_files.txt

但是,文件内容不遵循父文件中的内容.例如all_files.txt显示

"var.1010"
"var.1006"
"var.1025"
"var.1"
"var.5"
"var.15"
"var.203"
"var.227"
"var.285"

那么,我如何确保file_1_100.txt的内容首先出现,然后是files_201_300.txt,然后是files_1001_1100.txt,以便all_files.txt的内容

"var.1"
"var.5"
"var.15"
"var.203"
"var.227"
"var.285"
"var.1010"
"var.1006"
"var.1025"

解决方法:

让我尝试一下,但我认为这会奏效:

ls file*.txt | sort -n -t _ -k2 -k3 | xargs cat

我们的想法是获取文件列表并对它们进行排序,然后将它们传递给cat命令.

排序使用了几个选项:

> -n – 使用数字排序而不是字母
> -t _ – 使用下划线字符将输入(文件名)分成字段
> -k2 -k3 – 首先按第2个字段排序,然后按第3个字段排序(2个数字)

您已经说过您的文件名为file_1_100.txt,file_101_201.txt等.如果这意味着(因为它似乎表明)第一个数字“块”始终是唯一的,那么您可以不使用-k3标志.只有当您最终使用file_100_2.txt和file_100_10.txt时才需要该标志,您必须查看第二个数字“块”以确定首选顺序.

根据您使用的文件数量,您可能会发现指定glob(文件* .txt)可能会使shell崩溃并导致该行的错误太长.如果是这样的话,你可以这样做:

ls | grep '^file.*\.txt$' | sort -n -t _ -k2 -k3 | xargs cat

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐