替換 csv 檔案中的空格和空白儲存格

替換 csv 檔案中的空格和空白儲存格

我有一個包含 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 命令,這意味著如果先前的替換命令成功,請跳到標籤。

更多資訊:http://www.grymoire.com/Unix/Sed.html#uh-59

相關內容