用于以行格式打印输出的命令

时间:2014-10-07 17:32:21

标签: bash shell awk

我正在尝试以行格式将以下输出打印到csv文件。有人可以帮助我使用awk或bash吗?

Server abc.com
osbits x64
ostype windows

我想像这样打印输出并转发为csv格式

abc.com x64 windows

4 个答案:

答案 0 :(得分:0)

使用awk,您希望将输出字段分隔符(OFS)设置为逗号,然后打印第2,第4和第6个字段以匹配您的示例。

对于多行输入,您可以使用sed加入awk之前的行

me@myvm:~ $ cat servers.txt 
Server abc.com
osbits x64
ostype windows
me@myvm:~ $ cat servers.txt | sed -e 'N;N;s/\n/ /g' 
Server abc.com osbits x64 ostype windows
me@myvm:~ $ cat servers.txt | sed -e 'N;N;s/\n/ /g' | awk '{ OFS=","; print $2,$4,$6}'
abc.com,x64,windows

答案 1 :(得分:0)

这样可行,但我确定这是一种更惯用的方法:

awk '{printf "%s%s", ((NR==1)?"":", "),$2}'

答案 2 :(得分:0)

输入

Server abc.com foo.com bar.com buz.org
osbits x64 x86 sparc ppc
ostype windows linux solaris mac

awk脚本

{
    for (i=1;i<=NF;++i)
        a[i][NR] = $i;
}
END {
    for (i=2;i<=length(a); ++i) {
        str = a[i][1]
        for (j=2; j<=length(a[i]); ++j)
            str = str "," a[i][j]
        print str
    }
}

产生

abc.com,x64,windows
foo.com,x86,linux
bar.com,sparc,solaris
buz.org,ppc,mac

答案 3 :(得分:0)

假设您的输入文件file.txt如下所示:

Server abc.com
osbits x64
ostype windows

以下所有解决方案都会产生此输出:

Server,abc.comosbits,x64ostype,windows
  1. AWK

    awk '{printf "%s,%s",$1,$2}END{print ""}' file.txt
    
  2. 的Perl

    perl -000ane 'print join ",",@F,"\n"' file.txt 
    
  3.   while read a b ; do printf "%s,%s" "$a" "$b"; done < file.txt; echo