将多组文本文件与bash组合在一起

时间:2018-02-21 02:16:34

标签: bash

我有一个文本文件夹,标记如下:

0filename1
1filename1
2filename1
....
0filename2
1filename2
2filename2
....

等等。我想要做的是将所有以filename1结尾的文件全部合并到一个名为filename1的文件中,类似于filename2和所有其他文件。通常我会做这样的事情

cat [0123456789]*filename1 > filename1

并为我拥有的每个不同文件名重复命令。但是,我希望能够自动执行此操作。文件名的确切形式会定期更改,因此它并不像编写一个脚本那么简单,该脚本将对filename1,filename2等执行上述命令。文件名的长度确实保持不变,所以我怀疑正确的方法要自动执行此操作,脚本可以获取文件名中具有相同最后 n 个字符的每个文件,并将它们复制到名为 n 字符的文件中。我不知道如何做到这一点 - 任何建议?

3 个答案:

答案 0 :(得分:0)

听起来很简单,只需要过滤文件即可获得' base'字符串。

for $base in $( ls | cut -b 1-8 | sort -u ); do
    cat [0123456789]*$base > $base
done

其中1-8是您打算保留的字符,因此<文件名的长度一致> - < N最后一个字符而不是8

答案 1 :(得分:0)

更多复杂解决方案,用于处理具有空白字符的文件,具有多位数字或灵活的文件名长度:

df.values[(x >= pd.datetime(2000,4,15)) & (x <= pd.datetime(2000,6,15))]

答案 2 :(得分:0)

05,5b,30
0x0001,0f,ffffffff,0201,0x010003

脚本使用Bash扩展#!/bin/bash str="filename" for i in {1..2} do cat {?,??}"${str}${i}" > "${str}${i}" done 和字符通配符{..}来扩展可用的文件名。如果您有?0filename1,请使用一个9filename1并使用?作为??

示例:

10filename1-99filename1

上述脚本的输出为:

$ cat 0filename1 
011
$ cat 1filename1 
111
$ cat 2filename1 
211
$ cat 10filename1 
1011
$ cat 0filename2
022
$ cat 1filename2
122
$ cat 2filename2
222
$ cat 10filename2
1022