Ваша переменная $i
всегда начинается сd
:demo_room … …
Вам нужно извлечь имя файла. И поскольку мы извлекаем, мы можем также извлечь и имя, и номер файла.
Таким образом, более короткая версия вашего сценария может быть:
#!/bin/bash
declare -Ai count
for i in./demo_room/subject_1/?*; do
j=${i##*/} ; name=${j%_*} ; number=${j##*_}
((count[$name]++))
echo \
python motempl_n.py "$i" "${count[$name]}"
done
echo "List of keys: " "${!count[@]}"
Этот скрипт использует только одну переменную массива count
, список (автоматически )используемых клавиш (из$name
)печатается в конце скрипта.
Закомментируйте строку echo \
, если вам нравится, как работает скрипт для фактического выполнения команд.
Вы можете использовать awk ex.
awk -F, 'NF==3 {$0=","$0} 1' file
Если у вас достаточно свежая версия GNU awk, вы можете применить ее к файлу в месте -, используя
gawk -i inplace -F, 'NF==3 {$0=","$0} 1' file
В противном случае проще использовать другой инструмент, например sed
или perl
.
perl -i -F, -pe '$_ = ",". $_ if $#F == 2' file
или, возможно,
sed -i'.bak' -e 's/,/,/3;t' -e 's/^/,/' file
(попытаться заменить третью запятую и заменить запятую в начале строки, если это не удается ).
Я предлагаю sed
решение:
sed 's/^\([^,]*,[^,]*,[^,]*\)$/,\1/' file
Выход
col1,col2,col3,col4
a1,a2,a3,a4
b1,b2,b3,b4
,c2,c3,c4
d1,d2,d3,d4
Не уверен, что это работает, у меня нет машины, чтобы проверить это прямо сейчас.
Но вы всегда можете добавить запятую, а затем выполнить grep для последних четырех элементов:
sed -e 's#^#,#' | grep -o -E '[^,]+,[^,]+,[^,]+,[^,]+$'
У вас есть запятые внутри полей данных? Потом становится грязно.