2017-08-28 138 views
0

在一个文件中有%符号打交道,我使用这个命令使用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网上价格MATCH”

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

+0

请增加实际输入数据和相应的实际输出到你的问题。 –

回答

1

的第一个参数printf实际上是格式字符串,它被打印为-是如果没有格式化标志(%X),它是唯一的参数。除非你控制了字符串,否则你应该总是为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 
+0

.....在做了上述更改之后,现在脚本完全按照我的要求工作。感谢您的及时回应。万分感激。 – Kumar