Как прокомментировал @steeldriver, текст перед запросом на вход хранится в файле /etc/issue
и печатается сразу после вызова agetty
.
/usr/bin/agetty
отвечает за создание tty при запуске.
Мы можем просмотреть дерево systemd с помощью
systemctl status
В Arch файлы для systemd agetty хранятся по адресу /etc/systemd/getty.target.wants/getty1.service
.
В awk-скрипте содержимое — это то, что вы предоставляете awk
в виде команд. Так что в данном случае это:
/./ {
##comment print the name and grade, which is first two fields
print $1" "$2
}
Однако это затруднит использование -F,
, поэтому вместо этого установите FS
в блоке BEGIN
.
Таким образом, ваш сценарий будет:
#!/usr/bin/awk -f
##comment create an awk script that will accept the following file and output the name and grade fields
##comment specify the delimiter as ","
BEGIN { FS = "," }
/./ {
##comment print the name and grade, which is first two fields
print $1" "$2
}
Вы написали awk
скрипт, но поместили его в скрипт. Это ваш awk
скрипт:
/./ {
##comment print the name and grade, which is first two fields
print $1" "$2
}
Сохраните его в файл script.awk
и запустите как
awk -F',' -f script.awk inputfile
Теперь несколько советов по вашему сценарию:
Командыawk
выглядят как CONDITION {COMMAND(S)}
. Если CONDITION
выполняется для строки (, то выполняется/выполняется запись ), {COMMAND(S)}
. Если нет CONDITION
, {COMMAND(S)}
выполняется/выполняются для всех записей, если нет/нет {COMMAND(S)}
, то запись просто печатается всякий раз, когда встречается CONDITION
.
В вашем случае:
/./
это регулярное выражение, которое сопоставляет строки с любым символом... так что все строки, кроме пустых -в значительной степени избыточны, как условие
Вы используете " "
в качестве разделителя между переменными, используйте ,
для применения значения по умолчанию
Вам нужно будет использовать ,
в качестве разделителя в скрипте в начальном блоке BEGIN
-.
BEGIN {FS=","}
{print $1,$2}
Если вы также хотите использовать запятую в качестве разделителя вывода, используйте:
BEGIN {FS=OFS=","}
{print $1,$2}
Сценарий awk — это просто набор awk-команд, которые могут быть запущены с помощью awk
. Существует два способа написания awk-скрипта:
Просто напишите awk-команды в текстовом файле и вызовите с помощью awk -f /path/to/file.awk
. В вашем случае это будет:
/./ {
##comment print the name and grade, which is first two fields
print $1" "$2
}
И вы бы запустили его как:
awk -F, -f /path/to/file.awk inputFile
Или, если вам нужно, чтобы он запускался только с awk -f./path/to/file.awk inputFile
, без -F,
, то установите разделитель полей в самом скрипте:
BEGIN{ FS=","}
/./ {
##comment print the name and grade, which is first two fields
print $1" "$2
}
А затем запустить с помощью awk -f /path/to/file.awk inputFile
.
Напишите команды, но используйте шебанг, чтобы указать, какой интерпретатор должен читать сценарий. В вашем случае это будет выглядеть так:
#!/usr/bin/awk -f
## With this approach, you can't use -F so you need to set
## the field separator in a BEGIN{} block.
BEGIN{ FS=","}
/./ {
##comment print the name and grade, which is first two fields
print $1" "$2
}
Затем вы должны сделать скрипт исполняемым(chmod a+x /path/to/file.awk
)и запускать его следующим образом:
/path/to/file.awk inputFile
Это оба сценария awk. Третий вариант — вместо этого написать сценарий оболочки и заставить сценарий оболочки запускать awk. Это будет выглядеть так:
#!/bin/sh
awk -F, '
/./ {
##comment print the name and grade, which is first two fields
print $1" "$2
}' "$1"
То, что у вас было, было ни тем, ни другим :вы использовали awk shebang, но вместо awk-скрипта у вас был сценарий оболочки.