Используйте sort
и sed
:
sort -u input.file | sed "s/.*/'&',()(now,/"
Что, надо сказать, довольно странная строка для объединения в конец чего-либо.
Причинаприглашение оболочки меняется на '>
', так как думает, что вы не выполнили команду.Он называется вторичным приглашением и устанавливается через переменную $ PS2.Например, если я набрал:
$ sort -u input.file |
> sed "s/.*/'&',()(now,/"
'9842901121',()(now,
'9942501133',()(now,
'9942501199',()(now,
$
Когда я нажимаю клавишу возврата после символа канала, оболочка знает, что команда не завершена, поэтому она запрашивает оставшуюся часть ввода - в этом случае команду sed.
Я использовал кавычки - на этот раз двойные кавычки - вокруг сценария sed, чтобы сообщить оболочке, где заканчивается аргумент.Без них я получаю синтаксическую ошибку, но вполне возможно, что оболочка будет неправильно понимать вещи и думать, что команда была неполной.Я обычно использую одинарные кавычки вокруг строк регулярных выражений;в целом меньше поводов для беспокойства.Но на этот раз замещающий текст содержал одинарные кавычки, а затем использование одинарных кавычек вокруг всей строки требует:
sort -u input.file | sed 's/.*/'\''&'\'',()(now,/'
, что намного сложнее писать и читать, чем версия в двойных кавычках.
Из комментариев:
cat inputfile.txt | sort | uniq > Inputfile.txt
awk -F" " ' {print (echo ""$1" ,()(now,")}' Inputfile1.txt
В приведенной выше команде я не могу добавить '
до и после числа, но другие работают нормально.
- Пожалуйста, не злоупотребляйте
cat
. - Пожалуйста, помните, что
sort -u
быстрее sort | uniq
. - К вашему сведению: в файловой системе нечувствительны к региструworld.
- Возможно, у вас есть опечатка для Inputfile1.txt.
- Если вам не нужен промежуточный файл, просто перенаправьте вывод из фазы сортировки в фазу 'mangle'.
- Как я уже отмечал в моем основном ответе, вы должны быть очень осторожны с кавычками, особенно когда вы хотите их напечатать.
- Опция
-F
для awk
необходима только при наличии нескольких полейна линии и разделитель не является «пустым пространством» (пробелы или таbs).
Использование awk
вместо sed
вполне возможно;нам просто нужно быть осторожным с цитатами.Проблема в том, что сам скрипт awk
должен включать как одинарные, так и двойные кавычки, а это значит, что вы должны быть очень осторожны.Я рекомендую использовать sed
, потому что вам не нужно вводить в скрипт одинарные и двойные кавычки.
sort -u inputfile.txt |
awk '{printf "'\''%s'\'',()(now,\n", $0}'
Первая одинарная кавычка начинает строку в одинарных кавычках;в строке в одинарных кавычках нет специальных символов, и первая следующая одинарная кавычка завершает ее.Итак, первая двойная кавычка - просто обычный символ.Вторая одиночная кавычка - это начало запоминающейся последовательности: '\''
.Первая из этих одинарных кавычек завершает текущую строку в одинарных кавычках;одиночная кавычка с обратной косой чертой встраивает в строку одинарную кавычку;третья одинарная кавычка в последовательности начинает новую строку в одинарных кавычках.После этого «% s» является частью строки, затем есть еще одна из '\''
последовательностей, чтобы вставить еще одну одинарную кавычку в скрипт;затем остальная часть строки формата printf()
, за которой следует заключительная одинарная кавычка.Заключая вещи в одинарные кавычки, нам не нужно беспокоиться о экранировании двойных кавычек, обратных кавычек, обратной косой черты и знаков доллара в строке.В результате awk
видит текст программы:
{printf "'%s',()(now,\n", $0}
, который печатает входные данные с одинарными кавычками и последовательностью ',()(now,
' после нее, заканчивая новой строкой.
Можете ли вы написать это с двойными кавычками вокруг программы?Да, конечно, вы можете:
sort -u inputfile.txt |
awk "{printf \"'%s',()(now,\\n\", \$0}"
На самом деле это на два символа короче, чем в одиночной кавычке, но было больше возможностей ошибиться.С одиночными кавычками все, что мне нужно сделать, это заменить каждую одиночную кавычку, которая должна появиться в скрипте, на последовательность '\''
;с двойными кавычками я должен беспокоиться о экранировании других специальных символов.
Хорошее понимание одинарных и двойных кавычек очень и очень важно для программирования оболочки. То же самое можно сказать и о том, какие части скрипта связаны с тем, что видит оболочка, а какие - с тем, что видит команда (awk
в этом примере, или sed
, или perl
, или ...).