Добавить столбец в файл в linux в начале строки, если длина меньше 4

Ваша переменная $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 \, если вам нравится, как работает скрипт для фактического выполнения команд.

2
03.05.2020, 00:27
3 ответа

Вы можете использовать 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

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

8
28.04.2021, 23:16

Я предлагаю sedрешение:

sed 's/^\([^,]*,[^,]*,[^,]*\)$/,\1/' file

Выход

col1,col2,col3,col4
a1,a2,a3,a4
b1,b2,b3,b4
,c2,c3,c4
d1,d2,d3,d4
3
28.04.2021, 23:16

Не уверен, что это работает, у меня нет машины, чтобы проверить это прямо сейчас.

Но вы всегда можете добавить запятую, а затем выполнить grep для последних четырех элементов:

sed -e 's#^#,#' | grep -o -E '[^,]+,[^,]+,[^,]+,[^,]+$'

У вас есть запятые внутри полей данных? Потом становится грязно.

1
28.04.2021, 23:16

Теги

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