文本文件字符串的截取(linux下AWK的使用)

今天工作接了个任务。领导给了一堆URL,让把其中的域名整理出来。

给的文档内容如下

https://new.aol.com/productsweb/?promocode=825345&ncid=txtlnkuswebr00000106
http://www.aol.com/#
https://account.aol.com/account/settings/start
http://www.aol.com/#
http://www.aol.com/?molhp=txtlnkusaolp00000051&icid=acm50mtmhpusermenu
http://mail.aol.com/?offerId=newmail-testf-en-us
http://on.aol.com
http://www.aol.com/favorites/
http://www.aol.com/wintergamesunfiltered/
http://www.aol.com/
http://mail.aol.com/
http://weather.aol.com/
http://www.mapquest.com/


要求的结果呢就是

new.aol.com

account.aol.com

mail.aol.com

.

.

www.mapquest.com

这个样子。

当然,数据量比较大,有200多个网站的二级域名,于是就想写个小程序。

最开始想到的是最熟悉的C语言。头皮都抓破了写出下面这段代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLINE 100
#define FILENAME "domain.txt"
#define STARTNUM 7
int main()
{

 FILE *fp_source;
 char arr[MAXLINE+1];
 char arr2[MAXLINE+1];
 FILE *fp_result;
 if((fp_source = fopen (FILENAME, "r")) == NULL)
 {
  perror ("File source open error!\n");
  exit (1);
 }
 if((fp_result = fopen ("result", "r+")) == NULL)
 {
  perror ("File result open error!\n");
  exit (1);
 }
 printf("start fgets\n");
 while((fgets(arr, MAXLINE, fp_source)) != NULL)
 {
    int i=STARTNUM;
    int j=0;
    while(arr[i]!= '/' && arr[i]!=32 && arr[i]!=10 && arr[i]!=13) //32 10 13为 空格回车制表件ASSCI值
      {
        arr2[j]=arr[i];
        i++;
        j++;
      }
      arr2[j]='\0';
      arr2[j+1]='\n';
    printf("end char copu\n");
    int flag=0;
    fseek(fp_result,0,SEEK_SET);
    while((fgets(arr, MAXLINE, fp_result)) != NULL)  
      {
        printf(" arr[]=");
        puts(arr);
        printf(" arr2[]=");
        puts(arr2);
        printf("\n");
       if(strcmp(arr,arr2)==0)
        flag=1;
        printf("flag=%d \n",flag);
      }
    printf("end strcmp\n");
    if(flag == 0)
    {
      fseek(fp_result,0,SEEK_END);
      fputs (arr2,fp_result);
      fputc ('\n',fp_result);
    } 
      
      // fputs (arr, stdout);
 }
 fclose(fp_result);
 fclose(fp_source);
 return 0;
}
悲剧的是程序还不能用。 在字符串比较那块儿出的问题,flag一直是0. 好心人顺便给看看是怎么个情况吧 。


经高人指点,用一行linux命令解决了问题 命令如下 

 cat *|awk -F[\/] '{print $3}'|sort -u >>gwdns

分开解释下

awk -F [\/]    //awk默认字段分隔符为空格,用-F命令可以更改默认字段分隔符,此处将默认分隔符改为/

printf $3      //打印第三个字段  $3为awk默认变量,awk和shell类似,用1-9分别代表1到9个字段,特别的 ,0 代表整行。

sort -u        //对结果进行排序并去除相邻重复行 ,可以用 sort|uniq 替换。




猜你喜欢

转载自blog.csdn.net/u011762549/article/details/19563479