Хорошо, давайте ответим. rsync
- это инструмент командной строки для этого. Итак, вам нужно что-то вроде этого:
rsync -a /home/mydir /media/myusb/photos
см. man rsync
для получения полной информации. Параметр -a
дает вам подмножество наиболее часто используемых параметров - это «режим архивирования», эквивалентный -rlptgoD. Это скопировало бы содержимое / home / mydir в / media / myusb / photos, и не нужно было бы копировать какие-либо файлы, которые уже присутствовали и были идентичны в месте назначения.
Попробуйте это
$ awk -F, 'NR<2{split(gensub(/Citty/,"City","g",$0),a,FS)}NR==2{for(b=2;b<=NF;b+=2){c=c a[b]" "$b","}print gensub(/,$/,"",1,c)}NR>2{print gensub(/(^,|" *",)/,"","g",$0)}' inp
Product Name,City Location,Price Per Unit
banana,CA,5.7
apple,FL,2.3
$
Один и тот же код становится более читаемым, если он разбит на несколько строк.:
$ awk -F, '
> NR<2{split(gensub(/Citty/,"City","g",$0),a,FS)}
> NR==2{for(b=2;b<=NF;b+=2){c=c a[b]" "$b","}print gensub(/,$/,"",1,c)}
> NR>2{print gensub(/(^,|" *",)/,"","g",$0)}' inp
Product Name,City Location,Price Per Unit
banana,CA,5.7
apple,FL,2.3
$
Если 1-я строка, разбить строку на элементы массива в пределах a. Исправьте опечатку в Citty ->City.
Если 2-я строка, начиная со 2-го столбца, вывести соответствующий столбец из 1-й строки вместе с этим столбцом. Повторите для каждого столбца с шагом в 2 столбца. Зачистите шлейф ,
.
После второй строки замените любой начальный ,
или любой "<spaces>",
пустой строкой, а затем распечатайте результат.
Проверено успешно на GNU Awk 4.0.2
Попробуйте
awk -F, '
{gsub (/,*"[ ]*",*/, ",")
sub (/^,/, "")
sub (/Citty/, "City")
}
NR == 1 {n = split ($0, T)
next
}
NR == 2 {for (;n; n--) $n = T[n] " " $n
}
1
' OFS=, file
Product Name,City Location,Price Per Unit
banana,CA,5.7
apple,FL,2.3
Использование Perl с текстом ::CSV и другие утилиты:
perl -MText::CSV -MList::MoreUtils=pairwise -lne '
BEGIN { $p = Text::CSV->new(); }
@f = $p->fields() if $p->parse($_);
@hdr = map { s/Citty/City/ ; $_ } @f if $. == 1;
@f = pairwise { $a. " ". $b } @hdr, @f if $. == 2;
print join ",", grep { /\w/ } @f if $. > 1;
' file.csv
Product Name,City Location,Price Per Unit
banana,CA,5.7
apple,FL,2.3
grep
опускает поля, которые не содержат хотя бы один символ слова.
С perl >= 5.14.0 вы можете упростить замену на map s/Citty/City/r @f
с помощью модификатора Non -деструктивной замены .