我正在使用awk
(或gawk
)转换一些数据,并希望在再次打印输出之前删除其中一个输入字段。
我想要实现的是:
~ $ echo 'field1,field2,field3' | awk -F, '{transform($1); delete($2); print $0;}'
new_field1,field3
Run Code Online (Sandbox Code Playgroud)
我不能只分配一个空字符串,$2
因为这会导致new_field1,,field3
(注意两个逗号)。
我可以明确地只打印我想要的字段,但这不是很优雅,因为我的字段比 3 多得多,而且最后还有可选字段(此处未显示)。这就是为什么我更喜欢print $0
. 只需要先去掉一些字段。
任何的想法?
I have moved a ZFS pool from one SunFire server running some pre-release of Solaris 11 to another server running latest Solaris 10 and now can't import it. It was properly zfs export
from the old one. At the same time I migrated one another zpool (extpool2
) and it imported just fine. Here is what I get on the new server:
root@kria ~ # zpool import
pool: extpool
id: 8401594403030600070
state: ONLINE
status: The pool is formatted using …
Run Code Online (Sandbox Code Playgroud) 我有一个带有 autofs 挂载主目录的 Solaris 10 服务器。在一台服务器上,它们不会在 10 分钟超时期限后卸载。我们有AUTOMOUNT_TIMEOUT=600
在/etc/default/autofs
,我跑automount -t 600
,禁用和重新启用svc:/system/filesystem/autofs:default
服务,似乎没有任何工作。
我怀疑系统上的某些东西会定期访问所有已挂载的文件系统,可能会检查它们是否可访问,从而重置自动挂载程序超时,而该超时又永不过期。这得到了我刚刚做的一个测试的支持 - 如果我将超时设置为 10 秒,挂载点将被卸载,看起来 10 秒比某些东西正在进行检查并且计时器有机会到期的时间段短。
问题是我怎样才能找到什么进程正在这样做?服务器是一个大量使用的生产系统,我不能对它做任何危险的实验。
请注意,文件系统不会保持打开状态,可以手动卸载。那东西很可能将通过挂载点挂载点,光盘,光盘拿出来,继续前进,往往足以阻止automount
来自其卸载。但它不会保持打开状态,因此使用lsof
或不可见fuser -c
。我想在它访问挂载点时立即捕获或记录它以了解它在做什么。
FWIW 它是相当强大的 Solaris 10 主机 (Sparc / M5000) 上的 Solaris 10 区域。
我有一个程序,我想在启动systemd
时启动它,但只能在 DNS 可用后启动。
服务文件取决于network-online.target
:
$ cat /etc/systemd/system/te-m-pi.service
[Unit]
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/opt/te-m-pi
ExecStart=/opt/te-m-pi/te-m-pi.py
[Install]
WantedBy=default.target
Run Code Online (Sandbox Code Playgroud)
但是,当它启动时,它立即退出,因为它无法解析它需要的一些主机名:
te-m-pi.py[399]: socket.gaierror: [Errno -2] Name or service not known
systemd[1]: te-m-pi.service: main process exited, code=exited, status=1/FAILURE
systemd[1]: Unit te-m-pi.service entered failed state.
Run Code Online (Sandbox Code Playgroud)
如果我编辑 python 文件并time.sleep(10)
在最开始插入一个简单的,它会等待 10 秒,然后愉快地运行。
显然,当它启动时,网络尚不可用,尽管依赖于network-online.target
. 我如何确保它仅在网络真正启动并配置好时才启动?
我正在使用 systemd 215-17+deb8u7 在 Raspbian 8 Jessie 上运行它。
我一直在与bash
变量替换搏斗一段时间,但无法弄清楚这一点......
我有一个带有命令模板的变量:
CMD_TMPL='sudo -u ${USER_NAME} ${USER_HOME}/script.sh'
Run Code Online (Sandbox Code Playgroud)
变量USER_NAME
和USER_HOME
稍后在脚本中计算出来,当时还不知道CMD_TMPL
被定义。因此该命令是单引号并且尚未被替换。
然后脚本弄清楚了USER_NAME=test
,USER_HOME=/home/test
我想做一些会导致${CMD}
包含的事情:
sudo -u test /home/test/script.sh
Run Code Online (Sandbox Code Playgroud)
在脚本的进一步下方,我将在管道中使用该命令,例如:
${CMD} | output-processing.sh
Run Code Online (Sandbox Code Playgroud)
如何实现从变量名${CMD_TMPL}
到变量值的扩展${CMD}
?我尝试了各种echo
's 和eval
's 但无法弄清楚。
谢谢!
solaris ×2
autofs ×1
awk ×1
bash ×1
filesystems ×1
open-files ×1
raspberry-pi ×1
raspbian ×1
systemd ×1
zfs ×1