我正在使用以下格式输出 lot 输出文件的程序:
run_1_0001.blah
run_1_0002.blah
run_2_0001.blah
run_3_param_2_0001.blah
run_3_param_2_0002.blah
每次运行都会将数千个这些文件丢弃到同一目录中。文件名的头部是任意的,可能包含数字。唯一可预测的部分是文件名以4位数字和扩展名结尾。我想要的是编写一个别名,它排除了这些伪重复项,并为每个文件集合生成一行输出。在我给出的垃圾示例中,输出将是:
run_1_.blah
run_2_.blah
run_3_param_2_.blah
道歉,如果这很容易。我确实环顾四周但找不到任何东西。
答案 0 :(得分:0)
假设重复项之间的数字不同,您可以删除它们并将结果输出传递给uniq
,例如
创建测试文件:
touch some_filename_0001.blah some_filename_0002.blah some_otherfilename_0001.blah
删除数字并传递给uniq
:
ls | tr -d '[0-9]' | uniq
输出:
some_filename_.blah
some_otherfilename_.blah
根据您更新的测试数据以及您要使用ls -la
的事实,我建议使用awk
来解析数据。在我的ls
版本中,文件名是ls -la
输出中的第9个元素,所以这样的东西应该有效:
ls -la | awk '{ sub("[0-9]{4}", "", $9) } !h[$9]++'
这将从filename列中删除一个包含四个整数的序列,并且只有在之前没有看到它时才打印它。
警告:这假定文件名不包含空格。此外,“运行”和“参数”不应包含4个或更多整数,如果是这种情况,则需要使用更高级的正则表达式来锚定替换。