多个字段分隔单引号'和双引号" "在AWK [英] multiple field separator single quotes ' ' and double quotes " " in awk

查看:489
本文介绍了多个字段分隔单引号'和双引号" "在AWK的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我曾用于打印的两个连续的,里面的文本问过。比如我有以下字符串:

  gfdgjkfghjkfd fdgj FD-ghjhgj
gfggfkfdjfdgfhbgfhfghgjhgj
jhfjhgdfgdfFGF
fgfdgDFJ jfdg jhfgjdhfgdh jfdhgd jkfghfdhgjghj

和我想只打印以下内容:

 jkfghjkfd fdgj FD-
kfdjfdgfhbgfhfghg
dfgdf
DFJ jfdg jhfgjdhfgdh jfdhgd jkfghfd

我使用此命令的答案是:

 的awk -F'{为(i = 2; I< 5; I + = 2)的printf%s%s%S%S,FS,$ I ,FS(I> 5-2\\ N:)}'为sample.txt

现在我不得不添加到我的问题。即我的文字可以是以及里面。下面的例子:

  gfdgjkfghjkfd fdgj FD-ghjhgj
gfggfkfdjfdgfhbgfhfghgjhgj
jhfjhgdfgdf'ffdgGFDdgffd'FDG'FGF
fgfdgDFJjfdgjhfgjd'hfgdh jfdhgd jkfghfd'hgjghj

我想得到以下结果:

 jkfghjkfd fdgj FD-
kfdjfdgfhbgfhfghg
dfgdf'ffdgGFDdgffd'FDG'
DFJjfdgjhfgjd'hfgdh jfdhgd jkfghfd

有人可以帮帮我吗?


解决方案

  {
  一个=
  S = $ 0个
  #而s包含一个定界符(或')
  而(匹配(S,/ ['] /)){
    #保存分隔符
    C = SUBSTR(S,RSTART,1)
    #删除直到并包括分隔符
    S = SUBSTR(S,RSTART + 1)的
    #找到匹配的分隔符
    I =指数(S,C)
    #追加保存定界符和s到蓄压器的第一部分
    A = A的C SUBSTR(S,1,i)的
    #删除该段
    S = SUBSTR(S,I + 1)
  }
  #打印累加器(丢弃第一个空格)
  打印SUBSTR(一,二)
}

I had asked before for printing the texts inside of two consecutive " ". for example I have the following strings:

gfdg "jkfgh" "jkfd fdgj fd-" ghjhgj
gfggf "kfdjfdgfhbg" "fhfghg" jhgj
jhfjhg "dfgdf" fgf
fgfdg "dfj jfdg jhfgjd" "hfgdh jfdhgd jkfghfd" hgjghj

And I want to print only the following:

"jkfgh" "jkfd fdgj fd-"
"kfdjfdgfhbg" "fhfghg"
"dfgdf"
"dfj jfdg jhfgjd" "hfgdh jfdhgd jkfghfd"

I got the answer of using this command:

awk -F'"' '{for (i=2;i<5;i+=2) printf "%s%s%s%s", FS, $i, FS, (i>5-2?"\n":" ")}' sample.txt

now I have to add ' ' to my question. i.e. my text can be inside of ' ' as well as " ". the example below:

gfdg "jkfgh" "jkfd fdgj fd-" ghjhgj
gfggf "kfdjfdgfhbg" "fhfghg" jhgj
jhfjhg "dfgdf 'ffdg' gfd" "dgffd 'fdg'"fgf
fgfdg 'dfj "jfdg" jhfgjd' 'hfgdh jfdhgd jkfghfd' hgjghj

i would like to get the following result:

"jkfgh" "jkfd fdgj fd-"
"kfdjfdgfhbg" "fhfghg"
"dfgdf 'ffdg' gfd" "dgffd 'fdg'"
'dfj "jfdg" jhfgjd' 'hfgdh jfdhgd jkfghfd'

can someone please help me?

解决方案

{
  a = ""
  s = $0
  # while s contains a delimiter (either " or ')
  while (match(s, /['"]/)) {
    # save the delimiter
    c = substr(s, RSTART, 1)
    # remove up to and including the delimiter
    s = substr(s, RSTART + 1)
    # find the matching delimiter
    i = index(s, c)
    # append the saved delimiter and the first segment of s to the accumulator
    a = a " " c substr(s, 1, i)
    # remove the segment
    s = substr(s, i + 1)
  }
  # print the accumulator (dropping the first space)
  print substr(a, 2)
}

这篇关于多个字段分隔单引号'和双引号&QUOT; &QUOT;在AWK的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆