Как распечатать содержимое файла с именем файла перед каждой строкой? - PullRequest
5 голосов
/ 17 мая 2011

У меня есть несколько файлов, скажем, a, b, c, я бы хотел что-то вроде

 > cat a b c

но с "а" в начале строки а. «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 ]

8 голосов
/ 17 мая 2011
perl -pe 'print "$ARGV,"' a b c

сделает это.

5 голосов
/ 17 мая 2011

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
4 голосов
/ 17 мая 2011

Вы также можете использовать программу awk(1):)

$ awk 'BEGIN { OFS=","; } {print FILENAME , $0;}' *
a,hello
b,
b,
b,world
c,from space
d,,flubber
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...