Если у вас есть соединение с внешним сервером smtp с вашим хостом, вы можете настроить smtp на своем хосте и отправлять электронные письма.
Конфигурацию Smtp в шагах Linux можно найти здесь: http://kerneltalks.com/config/guide-smtp-configuration-linux/
Примеры почтовых команд можно найти здесь: http: //kerneltalks.com/commands/examples-send-email-through-terminal/
Вот уродливый sed
способ просто для удовольствия
sed '2,$ s/[^ ]\+/& &/; 2,$ s/ /\n/' file | paste -d ' ' - -
abc 123 abc
abc 789 bcd
bcd 456 acb
acb 135
2, $
из второй строки до последнего s / [^] \ + / & & /
удваивает первый набор непробельных символов ;
разделяет команды, как в оболочке s / / \ n /
заменить первый пробел новой строкой paste -d '' - -
склеить этот беспорядок (добавить вторую строку к третьей, четвертую строку к третьей и т. Д.) Запомните предыдущую строку:
awk 'NR > 1 { print prev, $1 } { prev = $0 } END { print prev }'
Это обрабатывает ввод следующим образом:
prev
, см. Следующий шаг ) и первое поле текущей строки, разделенные разделителем выходных полей (пробел по умолчанию); prev
; Альтернативный подход awk
:
$ awk 'NR == 1{printf "%s", $0;next}{printf " %s\n%s", $1,$0}' input.txt
abc 123 abc
abc 789 bcd
bcd 456 acb
acb 135
Это работает просто: первая строка - это особый случай - мы печатаем ее без новой строки и говорим awk перейти к следующей строке без выполнения других блоков кода . После этого NR == 1 {printf "% s", $ 0; next}
пропускается, но другие части выполняют работу.
Помните, что до сих пор мы печатали отформатированную строку без символа новой строки. Таким образом, то, что делает printf "% s \ n% s", $ 1, $ 0
, теперь распечатывает первое слово (и поскольку не было новой строки, оно остается в той же строке вывода) , вставлена новая строка, а затем вся строка (но не заканчивается символом новой строки). Таким образом, следующее первое вставленное слово останется в той же строке. Процесс продолжается и продолжается, пока мы не дойдем до конца файла.
Возможное улучшение - включение блока END {print ""}
для вставки последней строки новой строки. В некоторых случаях, когда полученный файл должен обрабатываться другими скриптами, это может быть желательно.
Хотя пользователь специально запросил AWK, тот же подход с печатью форматированных строк может быть применен с другими языками, например Python. Альтернатива Python предоставлена для тех, кому интересно, как это может быть реализовано на других языках:
#!/usr/bin/env python
from __future__ import print_function
import sys
old = None
for index,line in enumerate(sys.stdin):
if index == 0:
print(line.strip(),end=" ")
continue
words = line.strip().split()
print(words[0] + "\n" + line.strip(),end=" ")
И использование примерно так:
$ ./append_first.py < input.txt
abc 123 abc
abc 789 bcd
bcd 456 acb
acb 135
Здесь применима та же идея о последней строке новой строки.
На мой взгляд, самый простой и читаемый подход:
вырезать
) tail
) paste
) Пример: ваш пример входного файла:
abc 123
abc 789
bcd 456
acb 135
Затем выполните следующую команду в терминале
cut -d' ' -f1 in.txt | tail -n +2 | paste -d' ' file -
Вывод:
abc 123 abc
abc 789 bcd
bcd 456 acb
acb 135
Структура этого решения отличается от данных ответов. Нет необходимости в условиях, циклах или регулярных выражениях.