Удалить интервальные двойные кавычки в CSV, разделенные запятой и заключенные в двойные кавычки.

Может быть, попробовать это. Чтобы не перемещать файлы, только что перемещенные в all/txt, переместите их в новый каталог txtза пределами all, затем переместите txtв all. Вот так:

$ mkdir txt

Следующий будет только печатать все команды перемещения. Проверьте, что вам нравится что ты видишь:

$ find all | sed -rn 's#^all/recup_dir.([^/]*)/([^/]*).txt$#mv -n "&" "txt/\1-\2.txt"#p'
mv -n "all/recup_dir.20/2.txt" "txt/20-2.txt"
mv -n "all/recup_dir.20/1.txt" "txt/20-1.txt"
mv -n "all/recup_dir.19/5.txt" "txt/19-5.txt"
mv -n "all/recup_dir.19/4.txt" "txt/19-4.txt"
...

Когда они удовлетворены, запустите их, добавив| sh:

$ find all | sed -rn 's#^all/recup_dir.([^/]*)/([^/]*).txt$#mv -n "&" "txt/\1-\2.txt"#p' | sh

затем поместите txtна место:

$ mv txt all
0
03.04.2020, 01:39
2 ответа

Использование csvformatдля превращения разделителей во вкладки (csvformat -T), удаление всех двойных кавычек (tr -d '"'), а затем возврат разделителей к запятым при заключении в кавычки каждого поля (последнего бита конвейера):

$ csvformat -T file.csv | tr -d '"' | csvformat -t -U1
"record 1","name 1","text 1, text 2"
"record 2","name 2","text 2"
"record 3","name 3",""

csvformatявляется частьюcsvkit.

2
28.04.2021, 23:18

Это будет работать независимо от того, какие символы вы вводите (, за исключением новой строки в полях, заключенных в кавычки, но это совсем другая проблема ).

С GNU awk для FPAT:

$ awk -v FPAT='("[^"]*")+' -v OFS='","' '{
    for ( i=1; i<=NF; i++ ) {
        gsub(/"/,"",$i)
    }
    print "\"" $0 "\""
}' file
"record 1","name 1","text 1, text 2"
"record 2","name 2","text 2"
"record 3","name 3",""

или эквивалент с любым awk:

$ awk -v OFS='","' '{
    orig=$0; $0=""; i=0;
    while ( match(orig,/("[^"]*")+/) ) {
        $(++i) = substr(orig,RSTART,RLENGTH)
        gsub(/"/,"",$i)
        orig = substr(orig,RSTART+RLENGTH)
    }
    print "\"" $0 "\""
}' file
"record 1","name 1","text 1, text 2"
"record 2","name 2","text 2"
"record 3","name 3",""

См. также что такое --самый -надежный -способ -для -эффективного -анализа -csv -с использованием -awk .

0
28.04.2021, 23:18

Теги

Похожие вопросы