linux - bash 根据另一个命令的输出替换部分命令的输出

标签 linux bash

我有 2 个命令可以在我的 linux 系统上输出设备:

$ devlist -t csv -o device,vol_name
device,vol name,
/dev/mapper/mpath62,volume1,
/dev/mapper/mpath63,my_volume,
/dev/mapper/mpath64,foo,
/dev/mapper/mpath65,bar,
/dev/mapper/mpath66,2nd_vol,
$ multipathd -k'show maps'
name     sysfs uuid             
mpath62  dm-0  20017380029ab0043
mpath65  dm-1  20017380029ab0044
mpath66  dm-2  20017380029ab0045
mpath63  dm-3  20017380029ab0046
mpath64  dm-4  20017380029ab0047

如何合并输出以打印(最好不创建临时文件):

device,vol name,
/dev/dm-0,volume1,
/dev/dm-3,my_volume,
/dev/dm-4,foo,
/dev/dm-1,bar,
/dev/dm-2,2nd_vol,

谢谢

最佳答案

您可以将 awkprocess substitution 一起使用:

awk -F '[/, ]+' 'FNR==NR{a[$1]=$2; next}
   FNR==1{print;next}
   $4 in a{printf "/%s/%s,%s,\n", $2, a[$4], $(NF-1)}
' <(multipathd -k'show maps') <(devlist -t csv -o device)
device,vol name,
/dev/dm-0,volume1,
/dev/dm-3,my_volume,
/dev/dm-4,foo,
/dev/dm-1,bar,
/dev/dm-2,2nd_vol,

关于linux - bash 根据另一个命令的输出替换部分命令的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28880710/

相关文章:

linux - 我如何在 bash 或脚本中创建环境参数

bash - Docker osx挂载文件夹为空

bash - 无法打印句点千位分隔符

bash - 在 Ubuntu 上查找并删除 DOS 行结尾

linux - 使用 mkvmerge 在 bash 中进行 for 循环

linux - 测量程序的网络流量总量

c - 在 mkfifo 中授予 super 用户进程的权限

linux - oprofile 二进制构建错误 -(未找到自由库)

linux - 将次要版本从内核提取到 bash 变量

linux - 如何将 Node js服务器作为守护进程运行?