awk 使用 if 時的字元差異

awk 使用 if 時的字元差異

我有一個輸入文件,其中包含這一行(刪除了用戶資料/列)和數千行。 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...

相關內容