
我有一個包含 7 列的 csv 檔案。它有空的單元格和單元格之間的一些空間。如何用 NA 取代空白儲存格並刪除多餘的空格?非常感謝!
這是我的文件的樣子,但是當我複製並貼上它時,它似乎扭曲了。
130070078,PPW0001,1,4,4HW ,2,15.61943874
120040039,PPW0002,0,0, ,0,0
120040043,PPW0003,1,3,3WE ,1,14.43394935
答案1
您的答案:
sed 's/ *,/,/g' file1 | sed 's/,,/,NA,/g' > file2
如果最後一個欄位為空,則要取得「NA」:
sed 's/ *,/,/g' file1 | sed 's/,,/,NA,/g' | awk -F, 'OFS="," {if ($NF == "") $NF = "NA"; print}'> file2
您也可以使用:
sed 's/,,/,NA,/g' file1 | tr -d ' ' | awk -F, 'OFS="," {if ($NF == "") $NF = "NA"; print}'
答案2
αГsнιn的答案對我有用,但我想解釋一下。
我正在嘗試這樣的事情:
echo "1,,2,,,3,,,4,,,,5,,,,,,,,,,6" | sed 's/,,/,-,/g'
哪個輸出
1,-,2,-,,3,-,,4,-,,-,5,-,,-,,-,,-,,-,6
由於重複的空白字段,最後一個逗號是第一個替換的一部分,也是下一個所需替換的開始,因此您只需替換每個第二個空白字段。
現在你可以這樣做:
echo "1,,2,,,3,,,4,,,,5,,,,,,,,,,6" | sed -e 's/,,/,-,/g' -e 's/,,/,-,/g'
或者
sed 's/,,/,-,/g;s/,,/,-,/g'
這將替換所有單元格,因為第二個命令將獲取丟失的單元格,但這有點混亂。
αГsнιn 的命令本質上做同樣的事情,使用標籤和跳轉,我不知道你可以做到這一點。
sed ':MYLABEL; s/,,/,-,/g; t MYLABEL;'
輸出:
1,-,2,-,-,3,-,-,4,-,-,-,5,-,-,-,-,-,-,-,-,-,6
因此命令的第一部分創建一個標籤。
然後我們有相同的替換。
然後我們有 t 命令,這意味著如果先前的替換命令成功,請跳到標籤。