我有一个文本文件夹,标记如下:
0filename1
1filename1
2filename1
....
0filename2
1filename2
2filename2
....
等等。我想要做的是将所有以filename1结尾的文件全部合并到一个名为filename1的文件中,类似于filename2和所有其他文件。通常我会做这样的事情
cat [0123456789]*filename1 > filename1
并为我拥有的每个不同文件名重复命令。但是,我希望能够自动执行此操作。文件名的确切形式会定期更改,因此它并不像编写一个脚本那么简单,该脚本将对filename1,filename2等执行上述命令。文件名的长度确实保持不变,所以我怀疑正确的方法要自动执行此操作,脚本可以获取文件名中具有相同最后 n 个字符的每个文件,并将它们复制到名为 n 字符的文件中。我不知道如何做到这一点 - 任何建议?
答案 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