我想将unix命令的输出数据放到csv文件中。 假设我得到的输出是:
A
B
C
我想将此数据作为
放在.csv文件中A B C
在三个不同的列中,但同一行。
答案 0 :(得分:4)
试试这个:
printf '%s\n' A B C | paste -sd ' ' >> file.csv
或更经典的CSV(带,
的分隔符:
printf '%s\n' A B C | paste -sd ',' >> file.csv
printf '%s\n' A B C
只是提供与您相同的样本输入的示例。我的解决方案也适用于同一行中的空格。
编辑,您似乎需要使用for
循环,因此:
for i in {0..5}; do printf '%s\n' {A..C} | paste -sd " " >> file.csv; done
或伪代码:
for ...:
unix_command | paste -sd " " >> file.csv
endfor
答案 1 :(得分:3)
unix_command | tr "\n" " " > file.csv
或
unix_command | awk 'ORS=FS' > file.csv
答案 2 :(得分:1)
据我了解,@ Django需要三行一行。
paste -d ' ' - - - < infile
如果您需要输出为csv格式(由,
分割),您可以使用此
paste -d ',' - - - < infile
这是测试结果
$ cat infile
Manoj Mishra
Japan
Environment.
Michael Jackson
America
Environment.
$ paste -d ',' - - - < infile
Manoj Mishra,Japan,Environment.
Michael Jackson,America,Environment.
答案 3 :(得分:0)
如果您的命令输出是多行的,并且您想要输入
以csv格式引用输出,每行n
个项目,以下脚本
可能很方便。
groupby
程序从stdin
和
n
引用的输入行可选地,使用-s
可选参数,程序丢弃
如果所说的最后一行不完全包含n
,则输出的最后一行
项目
像往常一样,-h
选项会回显使用行并退出。
指定程序打印使用行并退出的另一个选项 错误。
% cat groupby
#!/bin/sh
usage () { echo Usage: $0 [-s] n --- -s is for \"strict\", outputs only records of n items. ; exit $1 ; }
s=0
while getopts :sh o ; do
case "${o}" in
s) s=1 ; shift ;;
h) usage 0 ;;
*) usage 1 ;;
esac
done
awk -v n=$1 -v s=$s -v q='"' '
NR==1 {buf = q $0 q ; next}
NR%n==1 {print buf; buf = q $0 q ; next}
{buf = buf "," q $0 q}
END {if(!s||NR%n==0)print buf}'
%
% chmod +x groupby
% echo -e "1\n2\n3\n4\n5" | ./groupby 3
"1","2","3"
"4","5"
% echo -e "1\n2\n3\n4\n5\n6" | ./groupby 3
"1","2","3"
"4","5","6"
echo -e "1\n2\n3\n4\n5\n6\n7" | ./groupby 3
"1","2","3"
"4","5","6"
"7"
% echo -e "1\n2\n3\n4\n5\n6\n7\n8" | ./groupby -s 4
"1","2","3","4"
"5","6","7","8"
% echo -e "1\n2\n3\n4\n5\n6\n7" | ./groupby -s 4
"1","2","3","4"
%
我更改了默认设置以满足最佳OP要求,并引入了其他选项,请参阅用法字符串了解详情
#!/bin/sh
usage () { echo 'Usage: '$0' [-s] [-q quote_char] [-c separator_char] n
Reads lines from stdin and prints them grouped by n and separated by spaces.
Optional arguments:
-s is for "strict", outputs only records of n items;
-q quote_char, forces quoting of each input line;
-c separator_char, changes the field separator,
interesting alternatives are tab, comma, semicolon etc;
-h prints this help and exits.' ; exit $1 ; }
# Default options
s=0 ; q='' ; c=' '
# Treatment of optional arguments
while getopts :shc:q: o ; do
case "${o}" in
s) s=1 ; ;;
c) c="${OPTARG}" ;;
q) q="${OPTARG}" ;;
h) usage 0 ;;
*) usage 1 ;;
esac
done
shift $(($OPTIND-1))
# awk code
awk -v n=$1 -v s=$s -v q="$q" -v c="$c" '
NR==1 {buf = q $0 q ; next}
NR%n==1 {print buf; buf = q $0 q ; next}
{buf = buf c q $0 q}
END {if(!s||NR%n==0)print buf}'
答案 4 :(得分:-2)