linux顺序合并多个文件,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

标签:bash,linux,shell,unix,command-line

来源: https://codeday.me/bug/20190830/1764910.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值