我正在尝试以行格式将以下输出打印到csv文件。有人可以帮助我使用awk或bash吗?
Server abc.com
osbits x64
ostype windows
我想像这样打印输出并转发为csv格式
abc.com x64 windows
答案 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
AWK
awk '{printf "%s,%s",$1,$2}END{print ""}' file.txt
的Perl
perl -000ane 'print join ",",@F,"\n"' file.txt
壳
while read a b ; do printf "%s,%s" "$a" "$b"; done < file.txt; echo