如何用单行命令提取各模式最早出现的日期型CSV文件名
批量查找字符串首次出现的最早日期CSV文件
单行解决方案
sort -V *.csv | xargs -I {} grep -F -x -o -f input.txt {} | awk -v OFS='\t' '!seen[$0]++ {print $0, FILENAME}'
命令各部分解释
sort -V *.csv:按版本号规则对CSV文件排序,确保文件名按日期从早到晚排列(适配YYYY-MM-DD、YYYYMMDD等常见日期命名格式)xargs -I {} grep -F -x -o -f input.txt {}:遍历每个排序后的CSV文件,精准匹配input.txt中的字符串:-f input.txt:读取input.txt中的每行作为匹配模式-F:按固定字符串匹配,避免正则特殊字符干扰-x:要求完全匹配整行字符串(若允许子串匹配可移除该参数)-o:仅输出匹配到的字符串本身
awk -v OFS='\t' '!seen[$0]++ {print $0, FILENAME}':去重并保留首次匹配结果:seen[$0]记录每个字符串是否已找到最早出现的文件- 仅当字符串第一次出现时,输出字符串和对应的CSV文件名,后续相同字符串直接跳过
OFS='\t'设置制表符作为分隔符,方便结果的阅读和后续处理
注意事项
- 若日期文件名格式无法通过
sort -V正确排序,需根据实际格式调整排序参数(例如sort -k1,1 *.csv) - 若input.txt中的字符串包含空格,上述命令已适配该场景
内容的提问来源于stack exchange,提问作者Manse
相关产品推荐
相关产品推荐

