将中的行转换为列

2024-06-12 08:08:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用此脚本从服务器show /system1/swid*" |egrep -w "name|VersionString" | sed 's/^[ \t]*//;s/[ \t]*$//'生成以下输出,但无法将这些行转换为列。请帮我了解一下如何将其转换为专栏

name=iLO
VersionString=2.73 Feb 11 2020
name=System ROM
VersionString=P89 v2.76 (10/21/2019)
name=Redundant System ROM
VersionString=P89 v2.64 (10/17/2018)
name=Intelligent Provisioning
VersionString=2.70.75

所需输出

    name=iLO                            name=System ROM                             name=Redundant System ROM                   name=Intelligent Provisioning
VersionString=2.73 Feb 11 2020      VersionString=P89 v2.76 (10/21/2019)        VersionString=P89 v2.64 (10/17/2018)        VersionString=2.70.75

image


Tags: name服务器脚本romshowsystemfebintelligent
3条回答

如果允许使用花式UTIL,则使用sed^{}*Steve Kinzler's * ^{}

sed -n 's/.*/&\t/;N;s/\n//p' file | 
datamash transpose | align  -j _ -g 3

输出:

name=iLO                         name=System ROM                        name=Redundant System ROM              name=Intelligent Provisioning
VersionString=2.73 Feb 11 2020   VersionString=P89 v2.76 (10/21/2019)   VersionString=P89 v2.64 (10/17/2018)   VersionString=2.70.75

如果需要居中对齐文本,只需在末尾添加-a ca,如下所示:

sed -n 's/.*/&\t/;N;s/\n//p' file | 
datamash transpose | align  -j _ -g 3 -a c

输出:

           name=iLO                        name=System ROM                   name=Redundant System ROM         name=Intelligent Provisioning
VersionString=2.73 Feb 11 2020   VersionString=P89 v2.76 (10/21/2019)   VersionString=P89 v2.64 (10/17/2018)       VersionString=2.70.75
#!/bin/bash
# these are arrays
declare -a headers
declare -a values

# loop over versions.txt
while read line
do
    # add array elements
    if [ "${line:0:5}" == "name=" ]; then
        headers+=("${line}")
    else
        values+=("${line}")
    fi
done < versions.txt

# start lines
values_line="${values[0]}"
header_line="    ${headers[0]}"
# Loop over arrays
for (( ii=1; ii<${#headers[@]}; ii++ )); do
    # Determine number of spaces to add to header line
    spaces=$(( ${#values_line} - ${#header_line} ))
    # add spaces
    for (( jj=0; jj<${spaces}; jj++ )); do
        header_line="${header_line} "
    done
    # Append current values to lines
    header_line="${header_line}        ${headers[ii]}"
    values_line="${values_line}    ${values[ii]}"
done
# output lines
echo "${header_line}"
echo "${values_line}"

您可以这样做:

awk '
/^name/{ names= $0 ";" names} 
!/^name/ && NF{data= $0 ";" data} 
END { printf("%s\n%s\n",names,data)}' input.txt

将打印:

name=Intelligent Provisioning;name=Redundant System ROM;name=System ROM;name=iLO;
VersionString=2.70.75;VersionString=P89 v2.64 (10/17/2018);VersionString=P89 v2.76 (10/21/2019);VersionString=2.73 Feb 11 2020;

希望对你有用

相关问题 更多 >