awk实例搜集
时间:2005-01-14 来源:wingger
awk按域合并行
处理文件1.txt格式如下:
786: 宏病毒
786: WM/CEEFOUR.A
786: 一般
786: MS OFFICE
786: 少
786: 文件
7860: WINDOWS下的PE病毒
7860: Trojan.userline
7860: WINDOWS下的木马程序
7861: WINDOWS下的PE病毒
7861: Trojan.WinSniffer
7862: WINDOWS下的PE病毒
7862: Trojan.Joiner.c
7862: WINDOWS下的木马程序
7863: WINDOWS下的PE病毒
7863: Trojan.clientghost
7863: WINDOWS下的木马程序
7864: WINDOWS下的PE病毒
7864: Trojan.QQjqr
7864: WINDOWS下的木马程序
7865: WINDOWS下的PE病毒
7865: Trojan.tlnetspy
7865: WINDOWS下的木马程序
7866: WINDOWS下的PE病毒
7866: Trojan.tlnetspy.Client
7866: WINDOWS下的木马程序
7867: WINDOWS下的PE病毒
7867: Harm.Spitfire
7867: WINDOWS下的破坏性程序
7868: DOS下的COM病毒
7868: DosCom.Virus.Renamber.d
7868: DOS下的COM病毒
7869: DOS下的COM病毒
7869: DosCom.Virus.Renamer.c
要求处理后的文件2.txt格式如下:
786: 宏病毒 786: WM/CEEFOUR.A 786: 一般 786: MS OFFICE 786: 少 786: 文件
7860: WINDOWS下的PE病毒 7860: Trojan.userline 7860: WINDOWS下的木马程序
7861: WINDOWS下的PE病毒 7861: Trojan.WinSniffer
7862: WINDOWS下的PE病毒 7862: Trojan.Joiner.c 7862: WINDOWS下的木马程序
7863: WINDOWS下的PE病毒 7863: Trojan.clientghost 7863: WINDOWS下的木马程序
7864: WINDOWS下的PE病毒 7864: Trojan.QQjqr 7864: WINDOWS下的木马程序
7865: WINDOWS下的PE病毒 7865: Trojan.tlnetspy 7865: WINDOWS下的木马程序
7866: WINDOWS下的PE病毒 7866: Trojan.tlnetspy.Client 7866: WINDOWS下的木马程序
7867: WINDOWS下的PE病毒 7867: Harm.Spitfire 7867: WINDOWS下的破坏性程序
7868: DOS下的COM病毒 7868: DosCom.Virus.Renamber.d7868: DOS下的COM病毒
7869: DOS下的COM病毒 7869: DosCom.Virus.Renamer.c
文件1.txt中包含了近9万种病毒信息,近40万行,希望提取出来,单独建立一个病毒数据库
处理要点:
第一:凡是每行带有冒号前相同数字的N行合并成一行,以Tab隔开
第二:注意类似10、11与110字符上的关系,以示区别
处理脚本aa.awk如下
BEGIN{
temp=""; #设置temp为空
}
{
if(temp==""){ #如果temp为空,
temp=$1; #则把第一列赋值给temp
printf "%st",$0 #并打印第一行
}
else #如果temp不为空
{
if(temp==$1) #判断域1否和与temp相同
{
printf "%st",$0 #相同,合并上下行
}
else
{
temp=$1 #不同,把域1赋值给temp
printf "n%st",$0 #打印
}
}
}
END{
printf "n"
}
如果你的文件中的内容是有顺序的话(要处理的文件名是filename):
awk -f tt.awk filename
如果文件内容没有排序,那要先排序:
sort -n filename|awk -f aa.awk