заменить пробелы и пустые ячейки в CSV-файле

заменить пробелы и пустые ячейки в CSV-файле

У меня есть файл csv с 7 столбцами. В нем есть пустые ячейки и несколько пробелов между ячейками. Как заменить пустые ячейки на 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нιη мне помог, но я хотел бы немного его пояснить.

Я пытался сделать что-то вроде этого:

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нιη по сути делает то же самое, используя метку и переход, о возможности чего я не знал.

sed ':MYLABEL; s/,,/,-,/g; t MYLABEL;'

выход:

1,-,2,-,-,3,-,-,4,-,-,-,5,-,-,-,-,-,-,-,-,-,6

Итак, первая часть команды создает метку.

Затем у нас происходит та же самая замена.

Затем у нас есть команда t, которая означает переход к метке, если предыдущая команда подстановки была успешной.

Больше информации:http://www.grymoire.com/Unix/Sed.html#uh-59

Связанный контент