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

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...