Наконец, после всех опробованных мною опций я удалил ос windows и mint os, которые давали только диск для загрузки ubuntu mate os, что в итоге решило проблему .
Использование GNUsed
:
$ sed -e "s/^/('/" -e "s/\t/','/g" -e "s/$/'),/" -e '$s/.$/;/' file
('0001','000000000000001','john smith','45','500'),
('0002','000000000000002','peter jackson','20','80'),
('0003','000000000000002','robert brown','35','100'),
('0004','000000000000007','sarah white','40','300');
Скрипт sed
состоит из четырех частей:
s/^/('/
заменяет начало строки на ('
. s/\t/','/g
заменяет вкладки на ','
. Это то, что требует GNU sed
. Для других реализаций sed
вставьте символ табуляции вместо \t
. s/$/'),/
заменяет конец строки на '),
. $s/.$/;/
заменяет запятую в конце последней строки (только )на ;
. Если ваш входной файл разделен табуляцией, вы можете попробовать следующее:
awk -F"\t" -v q="'" -v OFS="','" '$1=$1 {print "(" q $0 q ");"}' filename
Или вставить кавычки в функцию печати:
awk -F"\t" -v OFS="','" '$1=$1 {print "(" "\x27" $0 "\x27" ");"}' filename
Чтобы добиться такого же поведения, как вы хотите, с вашим первоначальным скриптом, вы можете использовать метод "printf" awk. Это позволяет избавиться от символов новой строки, которые ставятся "печатью". Я предполагаю, что ваш скрипт должен быть переписан так:
cat test01 | awk '{for (i = 1; i <= NF; i++){printf $i"'\'','\''"}; printf "\n";}'
Вот моя попытка...
Мое утверждение состоит из 3-х частей :cat, awk, sed
Операторы awk и sed определенно можно улучшить, но я все еще изучаю их оба. Я сделал test01 в test2.txt
cat test2.txt | awk -F "\\t| " 'BEGIN {ORS=""}{print "("}{ORS=","}{for (i = 1; i <= NF; i++){print "'\''"$i"'\''"}}{print ")\n"}{ORS=""}' | sed 's/,)/),/' | sed 's/^,//' | sed '$ s/),/);/'