需要帮助格式化具有键:值的文件

需要帮助格式化具有键:值的文件

我有一个具有以下值的文件:

猫数据.txt

server1: 'calv'
server2: 'anot'
log: '/u/log/1'
server3: 'calv'
server4: 'anot'
server5: 'secd'
server6: 'calv'
LIB_TRGT_calv,anot: '/tmp/hello.txt'
LIB_TRGT_secd: '/var/del.tmp'

_TRGT_我得到包含ie LIB_TRGT_calv,anot& 的变量LIB_TRGT_secd

注意:变量的名称可能不同,例如DB_TRGT_<whatever>

_TRGT_我需要从上面的变量 iecalv,anot和 中获取之后的名称secd

考虑到我们得到了calv & anot & secd;我现在需要获取所有具有calv& anot&的条目secd,并将这些找到的条目添加到 data.txt 中,如下所示:

期望的输出:

server1: 'calv'
server2: 'anot'
log: '/u/log/1'
server3: 'calv'
server4: 'anot'
server5: 'secd'
server6: 'calv'
LIB_TRGT_calv,anot: '/tmp/hello.txt'
LIB_TRGT_secd: '/var/del.tmp'
LIB_server1:  '/tmp/hello.txt'
LIB_server2:  '/tmp/hello.txt'
LIB_server3:  '/tmp/hello.txt'
LIB_server4:  '/tmp/hello.txt'
LIB_server6:  '/tmp/hello.txt'
LIB_server5: '/var/del.tmp'

以下是我到目前为止所做的:

grep TRGT* data.txt | cut -d: -f1 |cut -d_ -f3
calv,anot
secd

更远

grep TRGT* test.txt | cut -d: -f1 |cut -d_ -f3 | sed -n 1'p' | tr ',' '\n'
calv
anot

我不知道如何使用xargs并进一步进行它。

答案1

由于这是 YAML,我会使用 YAML 解析器,例如yq来自https://kislyuk.github.io/yq/

给定输入数据file和一个简短的脚本script

$ yq -y -f script file
server1: calv
server2: anot
log: /u/log/1
server3: calv
server4: anot
server5: secd
server6: calv
LIB_TRGT_calv,anot: /tmp/hello.txt
LIB_TRGT_secd: /var/del.tmp
LIB_server1: /tmp/hello.txt
LIB_server2: /tmp/hello.txt
LIB_server3: /tmp/hello.txt
LIB_server4: /tmp/hello.txt
LIB_server5: /var/del.tmp
LIB_server6: /tmp/hello.txt

这是使用以下jq脚本完成的(yq是 JSON 解析器的 YAML 包装器jq):

with_entries(
        select(.key | test("_TRGT_")) |
        .value as $v |
        .key | sub(".*_TRGT_"; "") | split(",")[] |
        { key: ., value: $v }
) as $map |
. += with_entries(
        select(.value | in($map)) |
        { key: ("LIB_" + .key), value: $map[.value] }
)

首先计算 JSON 对象$map,根据问题中的数据,该对象将是从_TRGT_原始数据中的键解析出的特殊键值与路径名之间的简单映射:

{                         
  "calv": "/tmp/hello.txt",
  "anot": "/tmp/hello.txt",
  "secd": "/var/del.tmp"
}                          

对于原始数据中与该$map对象中的键相对应的每个值,将使用根据值的键计算出的键以及从 中相应条目中获取的值来创建一个新条目$map

相关内容