使用awk命令处理文件中的%符号

时间:2017-08-28 09:15:58

标签: unix awk

我正在使用此命令

awk '{printf $1; for (i=2;i<=10;i++) {printf OFS $i} printf "\n"}' FS='|' OFS='|' file.txt >>new_file.txt
如果记录在文件中没有任何%符号,则

工作正常。

我的要求:

Input:
A|B|C|D|E
A|B
Output:
A|B|C|D|E|||||
A|B||||||||

提供错误的样本值 - '20%OFF ONLINE PRICE MATCH'

我该如何处理这个问题? 错误 - awk:printf语句中没有足够的参数| 20%OFF ONLINE PRICE MATCH。

1 个答案:

答案 0 :(得分:1)

printf的第一个参数实际上是格式字符串,如果没有格式化标记(% x ),它就会按原样打印出来并且它是&#39;唯一的论点。除非您控制字符串,否则应始终为printf提供两个参数,正是出于这个原因,即防止在提供的字符串中出现格式化标志(预期或其他)。在您的情况下,将printf语句更改为

printf "%s", $1

printf "%s", OFS $i

你应该没事。

举例说明:

$ echo '20% OFF ONLINE PRICE MATCH' | awk -F\| '{ printf $1 }'
awk: weird printf conversion % O
 input record number 1, file 
 source line number 1
awk: not enough args in printf(20% OFF ONLINE PRICE MATCH)
 input record number 1, file 
 source line number 1

$ echo '20% OFF ONLINE PRICE MATCH' | awk -F\| '{ printf "%s\n", $1 }'
20% OFF ONLINE PRICE MATCH