根据文件 (BASH) 的输出创建动态 header

Create a dynamic header based from the output on the file (BASH)

我有一个非常动态的文件。从某种意义上说,动态 HostiSCSI_Name 可能会变短或变长。它适用于某些具有长 iqn 名称的主机,例如下面的示例,但它不适用于具有较短名称的主机。

如果有人这样做过,或者可能有一个以前的脚本创建了一个动态的 header,它会遵循给定数据的长度,反之亦然。

,我们将不胜感激。

长iqn名字

MAPPING
==================================================================================
Host           Status                 iSCSI_Name                    State
==================================================================================
irefr-esz-011  online  iqn.2000-01.com.vmware:irefr-esz-011-312901  active
==================================================================================

带有短 iqn 和主机名 输出如下所示。数据不到位

MAPPING
==================================================================================
Host           Status                 iSCSI_Name                    State
==================================================================================
esz1  online  irefr-esz-011-312901  active
==================================================================================

目前,我的脚本中有这个。

echo -e "\e[96m MAPPING\e[0m"
echo "=================================================================================="
printf '%-12s %-30s %-21s %-30s %-20s\n' Host Status iSCSI_Name State
echo "=================================================================================="

cat outputfile | column -t

echo "=================================================================================="
echo

输出文件:

irefr-esz-011  online  iqn.2000-01.com.vmware:irefr-esz-011-312901  active
esz1  online  irefr-esz-011-312901  active
irefr-esz-011  online  iqn.2000-01.com.vmware:irefr-esz-011-312901  active
esz1  online  irefr-esz-011-312901  active
irefr-esz-011  online  iqn.2000-01.com.vmware:irefr-esz-011-312901  active
esz1  online  irefr-esz-011-312901  active

关于什么

SEP="===================================================================================="
(echo Host Status iSCSI_Name State; cat outputfile) | column -t | \
sed "1 s/\(.*\)/$SEP\n\n$SEP/";echo $SEP

sed 选择第一行并用前导和尾随分隔符对其进行修饰。