小编MLu*_*MLu的帖子

如何删除AWK中的输入字段?

我正在使用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. 只需要先去掉一些字段。

任何的想法?

awk

7
推荐指数
1
解决办法
1087
查看次数

zpool import - cannot import: one or more devices is currently unavailable

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)

zfs solaris

5
推荐指数
1
解决办法
8087
查看次数

什么进程偶尔访问已挂载的文件系统?

我有一个带有 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 区域。

filesystems solaris autofs open-files

5
推荐指数
1
解决办法
5608
查看次数

在 network-online.target 之后启动 systemd 服务但 DNS 仍然不可用

我有一个程序,我想在启动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 上运行它。

systemd raspberry-pi raspbian

5
推荐指数
1
解决办法
2004
查看次数

在另一个变量中替换 shell 变量名

我一直在与bash变量替换搏斗一段时间,但无法弄清楚这一点......

我有一个带有命令模板的变量:

CMD_TMPL='sudo -u ${USER_NAME} ${USER_HOME}/script.sh'
Run Code Online (Sandbox Code Playgroud)

变量USER_NAMEUSER_HOME稍后在脚本中计算出来,当时还不知道CMD_TMPL被定义。因此该命令是单引号并且尚未被替换。

然后脚本弄清楚了USER_NAME=testUSER_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 但无法弄清楚。

谢谢!

bash variable-substitution

1
推荐指数
1
解决办法
1474
查看次数