У меня была такая же проблема, и в конце концов я нашел это :https://github.com/systemd/systemd/issues/7074
Я испробовал всевозможные уловки, но, в конце концов, все исправилось просто:
sudo apt-get install nscd
Вот что говорит «apt -cache show nscd»:
Описание -en :Библиотека GNU C :Демон кэширования службы имен Демон, который обрабатывает пароль, группу и поиск хоста. для запуска программ и кэширует результаты для следующего запрос. Вы должны установить этот пакет, только если вы используете медленные сервисы, такие как LDAP, NIS или NIS+.
Вы можете сопоставить все строки, НЕ содержащие какую-либо строку, и добавить запятую:
sed '/.*VALUES.*\|.*INSERT.*\|);$/! s/$/,/' your_file
Это работает следующим образом:
VALUES
, INSERT
или заканчивающиеся на );
. \|
. !
(, поэтому только строки, НЕ содержащие эти строки действительно совпадают ). Убедившись, что он делает то, что вам нужно, просто добавьте -i
, чтобы выполнить замена в -месте:
sed -i '/.*VALUES.*\|.*INSERT.*\|);$/! s/$/,/' your_file
Как указал @they в комментариях ниже, эта команда также поместит запятая в последней строке каждого оператора INSERT (Я не уверен, что это проблема для вас):
INSERT INTO `db`.`table`
VALUES (
39741633,
.
.
.
29,
NULL, <--- unecessary comma here
);
sed -i '/INSERT INTO/{n;n;s/$/,/}' teststring.txt
Пропустил вариант -i
,эта команда SED добавила запятую в конце второй строки после INSERT INTO. Я могу делать то, что хочу, но мне пришлось многократно запускать эту команду для 10 строк, увеличивая n;
в каждой команде, чтобы следующая команда для третьей строки была
`sed -i '/INSERT INTO/{n;n;n;s/$/,/}' teststring.txt`.
Здесь их три n;
, а в первой команде их было два n;
.
Буду признателен, если у кого-нибудь есть лучший способ сделать это :-).
Поскольку у нас есть постоянное количество значений (строк )для вставки, мы можем подсчитать их и добавить запятую ко всем, кроме последней:
awk 'i>0 {i--; $0 = $0 ","} /^VALUES/ {i=11} 1' datafile.txt
На самом деле в этой awk
программе три оператора. Вы можете переписать это так, распределив на несколько строк. (Все строки в программе применяются по порядку к каждой строке ввода.)
awk '
i>0 { i--; $0 = $0 "," } # If we are counting, decrement the counter and append comma
/^VALUES/ { i=11 } # "VALUES" resets the counter for 12 values/rows
1 # Print the current line
' datafile.txt
Пример вывода (первая строфа)
INSERT INTO `db`.`table`
VALUES (
39741633,
49302045,
0,
44,
'{"CustomerName":"S","CustomerMobile":"8","CustomerEmail":"","VersionId":"5","CityId":"2","CampaignId":"1","InquirySourceId":"3","Eagerness":"-1","ApplicationId":"2","BranchId":"3","AssignedDealerId":"2","DMSInqNo":"45"}',
NULL,
0,
'2021-11-09 19:11:50',
NULL,
1,
29,
NULL
);
Вы можете использовать двухстрочное -пространство шаблона, и добавьте запятые ко всем строкам, которые не используйте INSERT или ); И из-за 2 строк в пространстве шаблона строка вокруг INSERT и ); тоже не добавляются.
sed -e '
$!N;/INSERT\|);$/!{s/\n/,&/;P;D;}
' file