awk中printf如何输出%

我有一个很大的文本,其中有一个域是我想要的内容,但是该域内的部分文本含有%,用printf输出时会有错误提示“awk:cmd.line:6:(FILENAME=-FNR=... 我有一个很大的文本,其中有一个域是我想要的内容,但是该域内的部分文本含有%,用printf输出时会有错误提示“awk: cmd. line:6: (FILENAME=- FNR=2) fatal: not enough arguments to satisfy format string...^ ran out for this one”。我该怎么办才能正常输出这些带有%的文本呢?

举例:
文本1:7.11 iphone to%2FmjWjG7Z8Z%2B8PGfZz7TmuFR0mBWiiUEg%3D NULL
文本2:android IZWzM%2FKZxGcaaY C9hhaGtS6NAafdjDIr8KySNgg6O NULL
文本3:0.99 1212 iphone 你好,请问你叫什么名,哪%d里字/t人,姓什么叫什么啊 NULL
文本4:android 你好,%f请问 你叫什么名,哪%d里字/t人,姓什么叫什么啊 NULL

我想取 iphone/android 后面域 和“NULL” 之间的文本内容,判断含有 iphone/android 的域,并设置变量i,命名该域为 $i,当我想输出 $(i+1) 的时候,遇到有%的就不能正常输出。
因为文本中间有域分隔符,所以不能用print,用了print就换行了,只用printf的情况下该怎么操作?
展开
 我来答
匿名用户
推荐于2018-05-13
展开全部
  printf("a=%d%%\n",a);
  %s是表示格式化,\n表示换行,这两个都是有特定意义的;
result里不会包含进去,而result里含有的所有字符串都会照常打印出来;
  %s和\n都是printf第一个参数的语法,printf按照这个参数解释你后面的变量。
但是对于%s,变量只要是字符串指针或数组就可以了,内容会被原样打印出来,不会被格式化语法影响。
百度网友5311d79
推荐于2016-10-29 · TA获得超过1.9万个赞
知道大有可为答主
回答量:6356
采纳率:71%
帮助的人:3146万
展开全部

遇到有%不能正常输出,不应该有这种情况。你看下面这个例子:

$ echo "哪%d里字/t人" | awk '{printf("%s\n",$0)}'
哪%d里字/t人

 

所以,像下面这样就可以:

awk '{for(i=1;i<=NF;i++)if($i=="android" || $i=="iphone"){printf("%s\n",$(i+1));break}}' file.txt
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
琴雅艳刀友
2019-08-12 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:28%
帮助的人:728万
展开全部
遇到有%不能正常输出,不应该有这种情况。你看下面这个例子:
$ echo "哪%d里字/t人" | awk '{printf("%s\n",$0)}'
哪%d里字/t人
所以,像下面这样就可以:
awk '{for(i=1;i<=NF;i++)if($i=="android" || $i=="iphone"){printf("%s\n",$(i+1));break}}' file.txt
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式