我需要將 csv 檔案的第 7 列從浮點數轉換為十進制數。這是一個巨大的檔案,我不想在讀取時使用以進行轉換。awk 有什么捷徑嗎?
輸入:
"xx","x","xxxxxx","xxx","xx","xx"," 00000001.0000"
"xx","x","xxxxxx","xxx","xx","xx"," 00000002.0000"
"xx","x","xxxxxx","xxx","xx","xx"," 00000005.0000"
"xx","x","xxxxxx","xxx","xx","xx"," 00000011.0000"
輸出:
"xx","x","xxxxxx","xxx","xx","xx","1"
"xx","x","xxxxxx","xxx","xx","xx","2"
"xx","x","xxxxxx","xxx","xx","xx","5"
"xx","x","xxxxxx","xxx","xx","xx","11"
試過這些,成功了。但有什么更簡單的嗎?
awk 'BEGIN {FS=OFS="\",\""} {$7 = sprintf("%.0f", $7)} 1' $test > $test1
awk '{printf("%s\"\n", $0)}' $test1
uj5u.com熱心網友回復:
使用您顯示的樣本,請嘗試以下awk程式。
awk -v s1="\"" -v OFS="," '{$NF = s1 ($NF 0) s1} 1' Input_file
說明:簡單的說明就是,在主程式中設定OFS為,then;在每一行的最后一個欄位中只保留數字并用 覆寫最后一個欄位",重新排列欄位并列印已編輯/未編輯的所有行。
uj5u.com熱心網友回復:
另一個簡單的awk解決方案:
awk 'BEGIN {FS=OFS="\",\""} {$NF = $NF 0 "\""} 1' file
"xx","x","xxxxxx","xxx","xx","xx","1"
"xx","x","xxxxxx","xxx","xx","xx","2"
"xx","x","xxxxxx","xxx","xx","xx","5"
"xx","x","xxxxxx","xxx","xx","xx","11"
uj5u.com熱心網友回復:
awk 'BEGIN{FS=OFS=","} {gsub(/"/, "", $7); $7="\"" $7 0 "\""; print}' file
輸出:
"xx","x","xxxxxx","xxx","xx","xx","1" "xx","x","xxxxxx","xxx","xx","xx","2" "xx","x","xxxxxx","xxx","xx","xx","5" "xx","x","xxxxxx","xxx","xx","xx","11"
gsub(/"/, "", $7):"從 $7 中洗掉所有
$7 0:將 $7 中的數字減少到最小表示
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/341200.html
