AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-274554

Chris's questions

Martin Hope
Chris
Asked: 2020-01-24 07:23:29 +0800 CST

根据另一个文件值替换列中的字符串

  • 0

输入文件:

col01 20083d70-1bf0-40f4-9df9-6247d587c085 text text
col02 d233d76d-e60d-442e-9b44-f0e1dc9ebefb text text
col03 20083d70-1bf0-40f4-9df9-6247d587c085 text text
col04 20083d70-1bf0-40f4-9df9-6247d587c085 text text
col05 b26063fa-93e4-414d-82f2-7c2924c81cc6 text text
col06 dc3e2f9b-05bf-49b4-a63e-c4bc09524eb3 text text
col07 d9f5cf1d-a8f9-488d-b088-b7ad00b67ec6 text text
col08 b26063fa-93e4-414d-82f2-7c2924c81cc6 text text
col09 d9a558ff-494a-4ada-8ec2-e9b2f9178599 text text
col10 b26063fa-93e4-414d-82f2-7c2924c81cc6 text text
col11 b26063fa-93e4-414d-82f2-7c2924c81cc6 text text
col12 4d78f804-18f6-4cc8-98a3-c4aedc60aebf text text
col13 0fe487fe-2ff2-4ca4-adf8-de3c19115dde text text
col14 581207a4-f4a5-4373-806b-0e1f7c298bb1 text text

参考文件:

0fe487fe-2ff2-4ca4-adf8-de3c19115dde group1
20083d70-1bf0-40f4-9df9-6247d587c085 group2
4d78f804-18f6-4cc8-98a3-c4aedc60aebf group3
581207a4-f4a5-4373-806b-0e1f7c298bb1 group4
b26063fa-93e4-414d-82f2-7c2924c81cc6 group5
d233d76d-e60d-442e-9b44-f0e1dc9ebefb group6
d9a558ff-494a-4ada-8ec2-e9b2f9178599 group7
d9f5cf1d-a8f9-488d-b088-b7ad00b67ec6 group8
dc3e2f9b-05bf-49b4-a63e-c4bc09524eb3 group9

预期输出:

col01 20083d70-1bf0-40f4-9df9-6247d587c085(group2) text text
col02 d233d76d-e60d-442e-9b44-f0e1dc9ebefb(group6) text text
col03 20083d70-1bf0-40f4-9df9-6247d587c085(group2) text text
col04 20083d70-1bf0-40f4-9df9-6247d587c085(group2) text text
col05 b26063fa-93e4-414d-82f2-7c2924c81cc6(group5) text text
col06 dc3e2f9b-05bf-49b4-a63e-c4bc09524eb3(group9) text text
col07 d9f5cf1d-a8f9-488d-b088-b7ad00b67ec6(group8) text text
col08 b26063fa-93e4-414d-82f2-7c2924c81cc6(group5) text text
col09 d9a558ff-494a-4ada-8ec2-e9b2f9178599(group7) text text
col10 b26063fa-93e4-414d-82f2-7c2924c81cc6(group5) text text
col11 b26063fa-93e4-414d-82f2-7c2924c81cc6(group5) text text
col12 4d78f804-18f6-4cc8-98a3-c4aedc60aebf(group3) text text
col13 0fe487fe-2ff2-4ca4-adf8-de3c19115dde(group1) text text
col14 581207a4-f4a5-4373-806b-0e1f7c298bb1(group4) text text

现在我可以通过循环实现这sed -i一点while:

$ cat reference|while read a b;do sed -i s/"$a"/"$a($b)"/ input;done

是否可以以更简单的方式完成,仅使用 awk 而不使用 while 循环,在单个 awk 命令处理中使用输入和参考文件仅更改第二列中的值?

awk gawk
  • 1 个回答
  • 40 Views
Martin Hope
Chris
Asked: 2019-09-05 23:16:20 +0800 CST

jq - 多个 if

  • 1

输入json文件:

[
  {
    "id": "1e9b2215-9efd-67cc-9113-1e21c74f09d3",
    "login": "u0159",
    "name": "Pat ABC",
    "role": "User",
    "groups": null,
    "disabled": false,
    "lLoginTime": 1567158950468,
    "lLoginFrom": "192.168.100.11"
  },
  {
    "id": "1e9b2215-9efd-67cc-9113-2b21c74f09d3",
    "login": "u0154",
    "name": "Roman ABC",
    "role": "User",
    "groups": [
      {
        "id": "1e8dc82a-596f-623c-8bc5-100000000000",
        "name": "Default ABC"
      },
      {
        "id": "1e99833f-9876-65d0-9d24-237228b9d9e0",
        "name": "AGE"
      }
    ],
    "disabled": false,
    "lLoginTime": 1567158950468,
    "lLoginFrom": "192.168.100.11"
  },
  {
    "id": "1e9b2215-9c2b-64f4-a0f1-47abdab7ae5f",
    "login": "u0155",
    "name": "Tomas CDE",
    "role": "User",
    "groups": [
      {
        "id": "1e8dc82a-596f-623c-8bc5-100000000000",
        "name": "ZZZ"
      },
      {
        "id": "1e8dc82a-596f-623c-8bc5-100000000000",
        "name": "Default ABC"
      },
      {
        "id": "1e99234f-9876-65d0-9d24-534528b9d9e0",
        "name": "NTE"
      }
    ],
    "disabled": false,
    "lLoginTime": 1566302653093,
    "lLoginFrom": "192.168.100.16"
  }
]

我想扩展以下过滤器:

$ jq -r '.[]|[.id, .login, ( if .groups == null then "n/a" else ([.groups[].name]|join("|")) end )]|@tsv' /tmp/test__
1e9b2215-9efd-67cc-9113-1e21c74f09d3    u0159   n/a
1e9b2215-9efd-67cc-9113-2b21c74f09d3    u0154   Default ABC|AGE
1e9b2215-9c2b-64f4-a0f1-47abdab7ae5f    u0155   ZZZ|Default ABC|NTE

从由 | 分隔的组列表中删除所有“默认 ABC” 输出时

我尝试了额外的 if 但失败并出现错误:

$ jq -r '.[]|[.id, .login, ( if .groups == null then "n/a" else ( if .groups[].name != "Default ABC" then [.groups[].name]|join("|")) end ) end )]|@tsv' /tmp/test__
jq: error: syntax error, unexpected ')' (Unix shell quoting issues?) at <top-level>, line 1:

感谢任何提示...

示例 json 的预期输出为:

1e9b2215-9efd-67cc-9113-1e21c74f09d3    u0159   n/a
1e9b2215-9efd-67cc-9113-2b21c74f09d3    u0154   AGE
1e9b2215-9c2b-64f4-a0f1-47abdab7ae5f    u0155   ZZZ|NTE

更新: oliv 提供的解决方案:

$ jq -r '.[]|[.id,.login,if .groups then (.groups|map(select(.name != "Default ABC").name)|join("|")) else "n/a" end]|@tsv' /tmp/test__
1e9b2215-9efd-67cc-9113-1e21c74f09d3    u0159   n/a
1e9b2215-9efd-67cc-9113-2b21c74f09d3    u0154   AGE
1e9b2215-9c2b-64f4-a0f1-47abdab7ae5f    u0155   ZZZ|NTE
json jq
  • 1 个回答
  • 2710 Views
Martin Hope
Chris
Asked: 2019-09-04 03:00:41 +0800 CST

jq过滤器从@tsv内部删除或替换选项卡

  • 1

输入json:

[
  {
    "id": "1e9b2215-9efd-67cc-9113-2b21c74f09d3",
    "login": "u0154",
    "name": "Roman ABC",
    "role": "User",
    "groups": [
      {
        "id": "1e99833f-9876-65d0-9d24-237228b9d9e0",
        "name": "AGE"
      }
    ],
    "disabled": false,
    "lLoginTime": 1567158950468,
    "lLoginFrom": "192.168.100.11"
  },
  {
    "id": "1e9b2215-9c2b-64f4-a0f1-47abdab7ae5f",
    "login": "u0155",
    "name": "Tomas CDE",
    "role": "User",
    "groups": [
      {
        "id": "1e8dc82a-596f-623c-8bc5-100000000000",
        "name": "ZZZ"
      },
      {
        "id": "1e99234f-9876-65d0-9d24-534528b9d9e0",
        "name": "NTE"
      }
    ],
    "disabled": false,
    "lLoginTime": 1566302653093,
    "lLoginFrom": "192.168.100.16"
  }
]

我需要打印制表符分隔的 .id、.login 和由 | 分隔的所有用户组 (管道)或逗号

我现在拥有的:

$ jq -r '.[]|[.id, .login, ([.groups[].name]|@tsv)]|@tsv' test.json
1e9b2215-9efd-67cc-9113-2b21c74f09d3    u0154   AGE
1e9b2215-9c2b-64f4-a0f1-47abdab7ae5f    u0155   ZZZ\tNTE

我需要修改过滤器,以便最后一列上的组用空格分隔或|代替当前\t

json jq
  • 1 个回答
  • 642 Views
Martin Hope
Chris
Asked: 2019-06-27 13:02:13 +0800 CST

uuid 上的“sort -nu”

  • 3

任何人都可以解释为什么“sort -nu”在下面的示例中只返回 1 个唯一行?

$ cat /tmp/test_
1e971713-31e4-62d0-a3d1-37c0610c10e5
1e97d59f-bc32-6126-b7b1-0b52ddd35273
1e971713-31e4-62d0-a3d1-37c0610c10e5
$ sort -nu /tmp/test_
1e971713-31e4-62d0-a3d1-37c0610c10e5
$

像“sort -u”这样的输出不应该有两条独特的行吗?

$ sort -u /tmp/test_
1e971713-31e4-62d0-a3d1-37c0610c10e5
1e97d59f-bc32-6126-b7b1-0b52ddd35273
$
sort uuid
  • 1 个回答
  • 439 Views
Martin Hope
Chris
Asked: 2019-05-11 00:37:04 +0800 CST

PIPESTATUS 来自 $(...|...) 中的命令

  • 3

${PIPESTATUS[0]在当前 shell 中设置变量时,如何读取命令?有没有办法以某种方式将它传递给当前的 shell?

我正在设置变量MAIL=$(ldapsearch.... | find_for_mail),并想确定ldapsearch在我确定 LDAP 中确实不存在邮件属性之前是否没有失败。

$ true | false
$ echo ${PIPESTATUS[0]} ${PIPESTATUS[1]}
0 1
$ Z=$(true | false)
$ echo ${PIPESTATUS[0]}
1                        <--- why 1?
$ echo ${PIPESTATUS[1]}

$ Z=$(true | false;echo ${PIPESTATUS[0]} ${PIPESTATUS[1]})
$ echo $Z
0 1
$ Z=$(true | false;C="${PIPESTATUS[0]} ${PIPESTATUS[1]}")
$ echo $C

$ Z=$(true | false;export C="${PIPESTATUS[0]} ${PIPESTATUS[1]}")
$ echo $C
bash shell-script
  • 2 个回答
  • 1421 Views
Martin Hope
Chris
Asked: 2018-06-25 09:48:43 +0800 CST

用空格替换制表符

  • 1

输入json:

[
  {
    "name": "cust1",
    "grp": [
      {
        "id": "46",
        "name": "BA2"
      },
      {
        "id": "36",
        "name": "GA1"
      },
      {
        "id": "47",
        "name": "NA1"
      },
      {
        "id": "37",
        "name": "TR3"
      },
      {
        "id": "38",
        "name": "TS1"
      }
    ]
  }
]

如何在@tsv 输出中获取用空格分隔的 .grp[] 名称?

$ jq -r '.[]|[.name, (.grp//[{"name":"-"}]|.[]|" ",.name)]|@tsv' test_inp
cust1           BA2             GA1             NA1             TR3             TS1

上述样本的预期输出:

cust[TAB]BA2[SPACE]GA1[SPACE]NA1[SPACE]TR3[SPACE]TS1
json jq
  • 1 个回答
  • 263 Views
Martin Hope
Chris
Asked: 2018-06-24 13:17:25 +0800 CST

jq - 转换毫秒

  • 0

输入json:

{
  "id": "3885",
  "login": "050111",
  "lastLoginTime": 1529730115000,
  "lastLoginFrom": "192.168.66.230"
}
{
  "id": "3898",
  "login": "050112",
  "lastLoginTime": null,
  "lastLoginFrom": null
}

当 lastlogintime 存在时过滤器起作用:

$ jq -jr --arg ARG1 050111 'select(.login==$ARG1)|"user:", " ",.login,"\n","lastlogintime:", " ",(.lastLoginTime / 1000 | strftime("%Y-%m-%d %H:%M UTC")),"\n","lastloginfrom:", " ",.lastLoginFrom // "-","\n"' test_json3
user: 050111
lastlogintime: 2018-06-23 05:01 UTC
lastloginfrom: 192.168.66.230

但是当 lastlogintime 不存在时出现问题(不打印“-”):

$ jq -jr --arg ARG1 050112 'select(.login==$ARG1)|"user:", " ",.login,"\n","lastlogintime:", " ",(.lastLoginTime / 1000 | strftime("%Y-%m-%d %H:%M UTC")),"\n","lastloginfrom:", " ",.lastLoginFrom // "-","\n"' test_json3
user: 050112
jq: error (at test_json3:12): null (null) and number (1000) cannot be divided

如何跳过空lastlogintimes的除法操作?

json jq
  • 1 个回答
  • 3379 Views
Martin Hope
Chris
Asked: 2018-06-24 11:34:57 +0800 CST

jq - 在一行中打印值

  • 20

json输入:

[
  {
    "name": "cust1",
    "grp": [
      {
        "id": "46",
        "name": "BA2"
      },
      {
        "id": "36",
        "name": "GA1"
      },
      {
        "id": "47",
        "name": "NA1"
      },
      {
        "id": "37",
        "name": "TR3"
      },
      {
        "id": "38",
        "name": "TS1"
      }
    ]
  }
]

预期,输出是两行:

name: cust1
groups: BA2 GA1 NA1 TR3 TS1

我试图构建过滤器但没有成功..

$ jq -r '.[]|"name:", .name, "groups:", (.grp[]|[.name]|@tsv)' test_json
name:
cust1
groups:
BA2
GA1
NA1
TR3
TS1

更新:下面提供的解决方案工作正常,但我没有预测不存在组的情况:

[
  {
    "name": "cust1",
    "grp": null
  }
]

在这种情况下,提供的解决方案会返回错误:

$ jq -jr '.[]|"name:", " ",.name, "\n","groups:", (.grp[]|" ",.name),"\n"' test_json2
name: cust1
jq: error (at test_json2:6): Cannot iterate over null (null)

任何解决方法表示赞赏。

json jq
  • 2 个回答
  • 43132 Views
Martin Hope
Chris
Asked: 2018-06-24 08:04:50 +0800 CST

jq - 为空值打印“-”

  • 24

输入json:

{
  "id": "3885",
  "login": "050111",
  "lastLoginTime": 1529730115000,
  "lastLoginFrom": "192.168.66.230"
}
{
  "id": "3898",
  "login": "050112",
  "lastLoginTime": null,
  "lastLoginFrom": null
}

我想以制表符分隔格式获取登录、lastLoginTime 和 lastLoginFrom 的输出:

050111  1529730115000   192.168.66.230
050112              -                -

使用下面的 jq 过滤器,我得到的输出没有“空”值,我可以用“-”替换

$ jq -r '.|[.login, .lastLoginTime, .lastLoginFrom]|@tsv' test_json
050111  1529730115000   192.168.66.230
050112

有没有其他方法可以为这些空值打印“-”?

json jq
  • 2 个回答
  • 18608 Views
Martin Hope
Chris
Asked: 2018-05-12 10:57:04 +0800 CST

jq - 选择以字符串开头的属性

  • 60

输入json:

[
  {
    "id": "89",
    "hostname": "abcd"
  },
  {
    "id": "89",
    "hostname": "babcd"
  }
]

如何修改以下过滤器以仅输出以“abcd”开头的主机名?

$ jq -r '.[]|select(.hostname | contains("abcd"))' jjjj
{
  "id": "89",
  "hostname": "abcd"
}
{
  "id": "89",
  "hostname": "babcd"
}
$ jq -r '.[]|select(.hostname | contains("^abcd"))' jjjj
$
json jq
  • 1 个回答
  • 64854 Views
Martin Hope
Chris
Asked: 2018-04-25 11:54:23 +0800 CST

更改密码更改提示

  • 0

有没有办法更改密码已过期时在密码更改过程中显示的默认提示?在 centos 和 rhel 上?I'd like to change (current) UNIX password:to Your previous password:orEnter expired password: 原来的提示误导了很多用户,他们在这个步骤中询问他们应该输入什么密码(他们在登录时已经输入了旧的过期密码,就在显示这个过期警告和提示之前,它再次要求他们输入老在(current) UNIX password:)

Changing password for user.
(current) UNIX password:
New password:
Retype new password:
rhel centos
  • 1 个回答
  • 715 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve