awk 拼接字符串的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk 拼接字符串的问题相关的知识,希望对你有一定的参考价值。

有谁知道awk中如何在拼接的字符串中包含双引号 ( " ) ?
这里有一个脚本:
1 #!/bin/sh
2
3 awk '
4 BEGIN
5 name = "longNBS.ID"
6 while(getline < name > 0) record[$1]++
7
8
9 close(name)
10 for(any in record)
11
12 command = "grep -P -m 1 "any" Sorbi1_GeneModels_AllModels_20080319.gff"
13 #print command
14 command | getline
15 lines[$0]++
16
17 for(pp in lines) print pp
18
19 ' $*

其中第12行是正则搜索,any部分是正则表达式,需要用双引号括起来才能给shell执行,但是直接加上双引号awk会报错....
请教大牛!!

参考技术A 具体报错信息是什么?这样才能帮你定位!
把#print command的注释去掉,看看打印的是什么!
awk字符串拼接就是直接连,字符串部分用“”,引用变量不需要“”,直接写!
你的错误不一定是这个地方引起的!
参考技术B 你报错的原因应该是
grep 前的双引号和any前的双引号配对的原因
这种情况
通常是用单引号或 \ 转意来避免
参考技术C 加转义符试试:
command = "grep -P -m 1 \"any\" Sorbi1_GeneModels_AllModels_20080319.gff"本回答被提问者采纳

awk

令格式与特殊变量

awk ‘BEGIN {命令} {命令} END {命令}‘

说明:

  • ""被当做拼接符使用
  • 参数用","分割时,参数打印则以空格作为分割符输出
  • NR获取当前读取文件当前行号
  • NF获取当前读取文件当前行字段数
  • $0获取当前读取文件当前行文本
  • $n(其中n>0)获取当前读取文件当前行第n个字段内容

常用参数

  • awk -v v2=$v1 ‘{print v2}‘:引用外部变量(v1在此命令之前定义)
  • awk ‘/regex/‘ :符合正则表达式的行
  • awk ‘!/regex/‘ :不符合正则表达式的行

自带字符串函数

  • length(string):获取字符串长度
  • index(string,pattern):获取pattern字符串在string中出现的位置
  • split(string,array,delimiter):用delimiter将string分割并存入array数组
  • substr(string,strat,end):获取string从strat到end位置字符子串
  • sub(regex,replace,string):将string中第一个符合正则表达式regex的替换为replace
  • gsub(regex,replace,string):将string中所有符合正则表达式regex的替换为replace

以上是关于awk 拼接字符串的问题的主要内容,如果未能解决你的问题,请参考以下文章

在awk中怎么把一行中的字符串后的\n去掉

SHELL脚本之字符串大截取取与切割

Linux命令

shell中按照指定字符截取两边的数据,放到变量里

linux bash中怎么拼接两个相互关联的命令,前者执行的结果是后者需要的,改怎么嵌套?

shell 字符串截取问题