我正在使用此命令
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。
答案 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