使用 if 时的 awk 字符差异

使用 if 时的 awk 字符差异

我有一个包含此行(删除了用户数据/列)和数千行内容的输入文件。xCE 是来自客户端文件的未转换的十六进制值。

412640  xCE

当我通过这个 awk 命令运行它时:

awk -F'\t' '{if ($1 == "412640" ) print $1 "\t" $2}' TEST.txt > test1.txt

test1.txt 中的输出已将 xCE 转换为 Î,这正是我想要的。

当我运行整个文件而不使用 if 时,这个命令如下:

awk -F'\t' '{print $1 "\t" $2}' TEST.txt > test2.txt

test2.txt 中的输出仍然包含 xCE,当我尝试时:

awk -F'\t' '{if ($1 == $1 )print $1 "\t" $2}' TEST.txt > test2.txt

test2 中的输出仍然包含 xCE。

关于如何始终获得转换后的输出有什么建议吗?

我正在使用:: GNU Awk 3.1.7 我的代码页是 UTF-8 在 redhat 6.7 上

编辑:在对“好”/“坏” awk 命令进行大量单元测试后,我无法始终复制“坏”输出。总行数越大,转换十六进制值的可能性就越小,但并非 100% 都是如此。我现在正在研究如何控制 awk 缓冲区的大小,假设这与直接从缓冲区写入输出有关,而不是在需要缓冲区进行其他操作时写入内部临时文件。

答案1

尝试一些方法

 awk '{ printf("%c \n" ,strtonum("0x" substr($2,2)))}' TEST.txt 

当然,根据您的需要修改 printf 表达式,if添加$2...

相关内容