在UNIX

时间:2016-03-26 14:02:02

标签: unix

我每天从服务器中获取一个文件(格式1 )中的数据,但是我获取了过去一周的数据。 我必须准确地存档数据1.5个月,因为这些数据被选中以进行一些图形表示。 我试图合并2天的文件并对它们进行唯一排序( code1 ),但由于原始文件的日常名称正在发生变化而无法正常工作。但是时间戳在此文件中是唯一的,但我不确定如何在特定列的基础上对唯一数据进行排序,是否有任何方法可以删除超过1.5个月的数据。 对于删除,我认为逻辑删除通过获取今天的日期 - 该文件的最短日期但再次无法获取最少日期。

格式1

r01/WAS2/oss_change0_5.log:2016-03-21T11:13:36.354+0000 | (307,868,305) | OSS_CHANGE | 

com.nokia.oss.configurator.rac.provisioningservices.util.Log.logAuditSuccessWithResources | RACPRS RNC 6.0 or 

newer_Direct_Activation:  LOCKING  SUCCEEDED audit[ | Source='Server' | User identity='vpaineni' | Operation 

identifier='CMNetworkMOWriterLocking' | Success code='T' | Cause code='N/A' | Identifier='SUCCESS' | Target element='PLMN-

PLMN/RNC-199/WBTS-720' | Client address='10.7.80.21' | Source session identifier='' | Target session identifier='' | 

Category code='' | Effect code='' | Network Transaction identifier='' | Source user identity='' | Target user identity='' | 

Timestamp='1458558816354']      

代码1

cat file1 file2 |sort -u > file3

第2天的数据,输入文件名不同

r01/WAS2/oss_change0_11.log:2016-03-21T11:13:36.354+0000 | (307,868,305) | OSS_CHANGE | 

com.nokia.oss.configurator.rac.provisioningservices.util.Log.logAuditSuccessWithResources | RACPRS RNC 6.0 or 

newer_Direct_Activation:  LOCKING  SUCCEEDED audit[ | Source='Server' | User identity='vpaineni' | Operation 

identifier='CMNetworkMOWriterLocking' | Success code='T' | Cause code='N/A' | Identifier='SUCCESS' | Target element='PLMN-

PLMN/RNC-199/WBTS-720' | Client address='10.7.80.21' | Source session identifier='' | Target session identifier='' | 

Category code='' | Effect code='' | Network Transaction identifier='' | Source user identity='' | Target user identity='' | 

Timestamp='1458558816354']

1 个答案:

答案 0 :(得分:1)

我在一周前写过几乎相似的代码。

Awk是一个很好的工具,如果你想明智地做任何操作。 此外,Sort Unique将无法正常工作,因为文件名正在更改 可以使用awk找到唯一行和最小日期。

1获取唯一文件内容

cat  file1  file2 |awk -F "\|" '!repeat[$21]++' > file3;  

此处-F指定您的字段分隔符 重复是采用时间戳的第21场 并且只打印那个时间的第一次出现,休息被忽略 因此,最终file1和file2的唯一内容将在file3中可用

2获取最短日期并找出2个日期之间的差异

Least_Date=`awk -F: '{print substr($2,1,10)}' RMCR10.log|sort|head -1`;
Today_Date=`date +%F` ;
Diff=`echo "( \`date -d $Today_Date +%s\` - \`date -d $Start_Date +%s\`) / (24*3600)" | bc -l`;
Diff1=${Diff/.*};
if [ "$Diff1" -ge "90" ]
then

这里我们使用{:}作为字段分隔符,最后使用substring获取确切的日期字段然后排序并找到最少的

值。 使用二进制计算器减去今天的日期,然后删除小数。

希望它有所帮助.....