如何在每行之前用文件名打印文件内容?

时间:2011-05-16 22:21:32

标签: python perl bash scripting sed

我有几个文件,比如a,b,c,我想像

 > cat a b c

但是在a的开头行有“a”。 “b”,在b行的开头,“c”,在c行的开头。 我可以使用python:

来做到这一点
#!/bin/env python

files = 'a b c'

all_lines = []
for f in files.split():
  lines = open(f, 'r').readlines()
  for line in lines:
    all_lines.append(f + ',' + line.strip())

fout = open('out.csv', 'w')
fout.write('\n'.join(all_lines))
fout.close()

但我更喜欢在命令行中执行此操作,将一些简单的命令与管道组合在一起操作

有没有简单的方法来实现这个目标?

感谢。

3 个答案:

答案 0 :(得分:8)

perl -pe 'print "$ARGV,"' a b c

会这样做。

答案 1 :(得分:5)

grep(1)sed(1)可以为您执行此操作:grep -H '' <files> | sed 's/:/,/'

$ cat a ; cat b ; cat c
hello


world
from space
$ grep -H '' * | sed 's/:/,/'
a,hello
b,
b,
b,world
c,from space

答案 2 :(得分:4)

您还可以使用awk(1)程序:)

$ awk 'BEGIN { OFS=","; } {print FILENAME , $0;}' *
a,hello
b,
b,
b,world
c,from space
d,,flubber