Может быть, попробовать это. Чтобы не перемещать файлы, только что перемещенные в 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
Использование 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
.
Это будет работать независимо от того, какие символы вы вводите (, за исключением новой строки в полях, заключенных в кавычки, но это совсем другая проблема ).
С 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 .