我有一个看起来像这样的文本文件:
line1
line2
line3
line4
line5
"" "" keep going for a long time
我正在努力想出一个能给我的脚本:
line1,line2,line3,line4,line5
line6,line7,line8,line9,line10
所以逗号将它们全部分开并每5个添加一个换行符。 有什么想法吗?
答案 0 :(得分:4)
paste -d, - - - - - < filename
答案 1 :(得分:1)
有点粗糙但可行,而不是采用可能更令人愉悦的perl解决方案。 -n 5 arg到xargs使它只向shell脚本发送5个参数,我们打印它们。
$ cat echo.sh
echo $1,$2,$3,$4,$5
$ $ cat file.txt
a
b
c
d
e
1
2
3
4
5
$ cat file | xargs -n 5 ./echo.sh
a,b,c,d,e
1,2,3,4,5
$
答案 2 :(得分:1)
cat foo.txt | xargs -L 5 | tr ' ' ','
这里的优点是你也可以将'5'参数修改为任意值,并且脚本按预期工作。
答案 3 :(得分:0)
如果你有perl,试试这个:
perl -ane '++$i; chomp; $line.=$_; if($i==5) {print "$line\n"; $line=""; $i=0;} else {$line.=","} ' <infile >outfile
答案 4 :(得分:0)
默认情况下,Python会安装在每个Linux发行版上。
我建议使用以下python脚本:
#!/usr/bin/env python
import argparse, csv
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='convert text to csv', version='%(prog)s 1.0')
parser.add_argument('infile', nargs='+', type=str, help='list of input files')
parser.add_argument('--out', type=str, default='temp.csv', help='name of output file')
args = parser.parse_args()
writer = csv.DictWriter(open(args.out, "wb"), ["field 1","field 2","field 3","field 4","field 5"], dialect='excel')
# write the header at the top of the file
writer.writeheader()
row = []
for fname in args.infile:
with open(fname) as df:
for line in df.readlines():
row.append(line.strip('\n'))
if len(row) = 5:
writer.writerow(row)
row = []
del writer
您应该能够将代码复制到文件中,然后在命令行中运行它。例如:text2csv.py yourinput.txt
当然,如果您调用文件text2csv.py
。