Этот sed
собирает замены TABLE2.csv
в удерживаемом пространстве, а затем выполняет добавление столбца:
sed 's/^[^,]*, *\([0-9]*,[^,]*\)$/\1/
T2
H;d
:2
G
s/\([^,]*,[^,]*, *\)\([0-9]*,\)\([^[:cntrl:]]*\)\n.*\n\2\([^[:cntrl:]]*\)/\1\2\4, \3/
P;d' TABLE2.csv TABLE1.csv
Вы должны добавить что-то к измененному заголовку, если это необходимо.
s/^[^,]*, *\([0-9]*,[^,]*\)$/\1/
извлекает второй и третий столбцы из TABLE2.csv
строк T2
переходит к :2
, если замена не производилась (таким образом, для TABLE2.csv
строк)TABLE2.csv
строки добавляются к H
старому пространству, а затем d
удаляются (останавливают выполнение для этой строки):2
— метка перехода. Все дальнейшее делается только для TABLE1.csv
строк G
добавляет таблицу поиска из области хранения в область шаблонов s/\([^,]*,[^,]*, *\)\([0-9]*,\)\([^[:cntrl:]]*\)\n.*\n\2\([^[:cntrl:]]*\)/\1\2\4, \3/
ищет вхождения идентификатора([0-9]*,
)в таблице поиска и добавляет соответствующее поле P
печатает строку (без добавленной таблицы поиска ), а d
останавливает выполнение строки. Для получения более подробной информации см. Как выполнить замену, определенную в одном файле, на другой файл
Кажется, я решил проблему. Проверено 8 раз, система работает как положено.
hdparm -W 0 /dev/sda1
Одно из различий между Windows и Linux заключается в том, что в Linux включен буферный кеш. Этот буферный кеш, по-видимому, искажал папку на диске, заставляя его добавлять номер в (/media/pi/Elements1 ). Я отключил его с помощью hdparm, и, похоже, он работает так, как задумано.