多个字段分隔单引号'和双引号" "在AWK [英] multiple field separator single quotes ' ' and double quotes " " in awk
本文介绍了多个字段分隔单引号'和双引号" "在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屋!
查看全文