所以我遇到了这个问题:我的Ubuntu中有一个包含日志文件的文件夹。所有文件的命名模式如下:
d的 1 .exert。的德 -access.log-的 2016年6月28日
有很多文件。我用粗体突出显示了名称的哪个部分可以变化。特定日期和域(.de,.co.uk,.dk等)总是有两个文件,其中一个以d1为前缀,另一个以d2为前缀。我需要为每个日期和域连接d1和d2文件,例如:
1) d1.exert.de_access.log_2016-06-28
2) d1.exert.dk_access.log_2016-06-24
3) d1.exert.dk_access.log_2016-06-25
4) d2.exert.de_access.log_2016-06-28
5) d2.exert.dk_access.log_2016-06-24
6) d2.exert.dk_access.log_2016-06-25
我需要配对和连接文件:1)和4),2)和5),3)和6)因为它们具有相同的域和日期,但前缀不同。
所以我需要遍历文件夹中的所有文件,并为每个日期和域找到这些d1 / d2对。然后我必须连接这些对。我需要编写一个自动查找这些对的脚本。我想过某种双循环(例如,外部搜索日期,内部搜索域),但我不知道如何实现它。或者可能有一些更简单的解决方案?
答案 0 :(得分:0)
您可以使用 sort 命令对它们进行排序,然后使用 cat 命令对它们进行排序。
示例:
# sort all files
ls *novono* | sort | sort -t '_' -k 3 > files
# get all dates
DATES=`cat files | sed 's/...www.novonordiskpro..._access.log_//' | uniq`
# merge files
for DATE in $DATES; do cat `grep $DATE files` > merge-$DATE; done
答案 1 :(得分:0)
假设文件始终是配对的:
ls -1 | sort -t\. -k 2 -k 1 | xargs -L2 your_command
这将对文件进行排序,以确保匹配对彼此跟随,然后使用两个参数调用your_command
。
答案 2 :(得分:0)
script.sh" folderpath"
#! /bin/bash
cd $1;
for i in `ls | awk -F"." '{sz=$2"."$3"."$4"."$5; print sz}' | sort | uniq`
do
file_d1=d1"."$i;
file_d2=d2"."$i;
#echo $file_d1;
#echo $file_d2;
cat $file_d1 >> $i;
cat $file_d2 >> $i;
done
最终的连接文件将存储在" folderpath"以下文件名:
www.novonordiskpro.<domain>_access.log_<date>
Example:
www.novonordiskpro.dk_access.log_2016-06-24
www.novonordiskpro.dk_access.log_2016-06-25