Это простое объединение строки с фиксированным текстом(X Y Z
)и части одной строки из одного файла(SummaryX.txt
)и всего содержимого другого файла с родственным именем файла(recordX.txt
)
#!/bin/sh
for sfile in Summary*.txt; do
rfile="$(echo "$sfile" | sed -e 's/^Summary/record/')"
ofile="$rfile.new"
{
echo X Y Z
sed -E -n -e 's/^.*RESULT ([0-9.]+ [0-9.]+ [0-9.]+).*/\1/p' "$sfile"
echo
cat "$rfile"
} > "$ofile"
# uncomment the following to replace the original record file with the new one.
# mv -f "$ofile" "$rfile"
done
Вы не указали, какую оболочку вы используете, поэтому здесь не используются какие-либо специфические для bash -манипуляции со строками или другие возможности. Он должен работать с любой оболочкой, совместимой с sh -.
Вывод будет сохранен в recordX.txt.new
, если вы не раскомментируете строку mv
. Это делается для того, чтобы вы могли убедиться, что он делает то, что вы хотите, до того, как он уничтожит ваши исходные входные файлы, (вы все равно должны работать с резервными копиями, когда делаете что-то потенциально разрушительное ).
$ cat record1.txt.new
X Y Z
111.114 30.344 90.3454
11111 absda qwedc
11112 uiyds dqeds
11113 eqwev jfsec...
Из подпроцесса Документация Python:
subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False) Run command with arguments and return its output as a byte string.
If the return code was non-zero it raises a CalledProcessError. The CalledProcessError object will have the return code in the returncode attribute and any output in the output attribute.
Вы можете проверить вывод исходной команды. Исходя из этого, вы либо печатаете no service installed
, либо запускаете systemctl --now disable autofs
.
import subprocess
try:
subprocess.check_output(["systemctl", "is-enabled", "autofs"], stderr=subprocess.DEVNULL)
except subprocess.CalledProcessError as e:
print('no service installed')
else:
subprocess.run(["systemctl --now disable autofs"])