Bash 如何在unix中使用二进制数据发布awk

Bash 如何在unix中使用二进制数据发布awk,bash,unix,awk,Bash,Unix,Awk,我该怎么做gsub awk一个包含二进制字符的文件,像这样的情况会使我的程序崩溃 我用cat编写了这样的代码 cat $filename | awk '{gsub("<85>",RS);print}' > somedir/sometxtfile.txt 这在包含类似此文件的二进制字符的文件上不起作用 ISA*00* *00* *01*157322272 *ZZ*00116520M *160907*1830*^*00403

我该怎么做gsub awk一个包含二进制字符的文件,像这样的情况会使我的程序崩溃

我用cat编写了这样的代码

cat $filename | awk '{gsub("<85>",RS);print}' > somedir/sometxtfile.txt
这在包含类似此文件的二进制字符的文件上不起作用

ISA*00*          *00*          *01*157322272      *ZZ*00116520M      *160907*1830*^*00403*000005354*0*P*><85>GS*PO*157322272*00116520M*20160907*1830*000005354*X*004030VICS<85>ST*850*0001<85>BEG*00*RE*7570006859**20160907<85>CUR*BY*USD<85>REF*IA*5164<85>REF*DP*595*ELECTRONICS             F<85>PER*BD*JILL MAYNARD<85>ITD*******45<85>DTM*001*20160919<85>DTM*037*20160912<85>N1*ST**92*51<85>PO1*1*14*EA*29.38*QT*UP*753048155606*VA*T54281E4BLK/GRY*IT*T54281E4*IN*12693802*BO*Orange*IZ*NO SIZE<85>CTP*RS*RES*59.99<85>PID*F****2015IMSLK5/ORANG/NSIZE/NDIMN<85>PO4*1<85>SDQ*EA*92*105*1*157*1*186*1*234*1*283*1*414*2*426*1*464*1*626*1*672*1<85>SDQ*EA*92*1012*1*1030*1*1083*1<85>PO1*2*14*EA*23.66*QT*UP*753048179756*VA*T40941E4*IT*T40941E4*IN*12693812*BO*Grey*IZ*NO SIZE<85>CTP*RS*RES*49.99<85>PID*F****2015EXPFUL/GREY/NSIZE/NDIMN<85>PO4*1<85>SDQ*EA*

让我们创建一个角色:

$awk'BEGIN{print A\x85 B}>foo

并以较少的方式查看它,例如:

$ less foo
A <85> B
foo (END)

你可以先解释一下你想做什么,为什么它不起作用?我们不需要一英里宽的记录,你不能用一个30字符的记录来说明这个问题吗?祝你好运。嗯,我一直在玩这个,如果我呆呆地看“BEGIN{printf%c ORS,\x41}”,我会得到预期的A,但是如果我看“BEGIN{printf%c ORS,\x85}”,我会得到一个呆呆的:cmd。第1行:致命:格式树:obuf:无法分配34359738368字节的内存无法分配内存。莫克给了我一个惊喜� 至少。二进制文件不适合由awk或任何其他文本工具解析。从某种意义上说,这不是二进制文件,而是扩展的ascii字符。
$ awk 'sub(/\x85/,"X")' foo
A X B