Создание CSV из текстовых файлов - PullRequest
0 голосов
/ 30 ноября 2010

У меня много txt-файлов, таких как:

Title 1
Text 1(more then 1 line)

И я хотел бы сделать из них один CSV-файл, который будет выглядеть так:

Title 1,Text 1
Title 2,Text 2
Title 3,Text 3
etc

Как я мог это сделать?Я думаю, что awk хорош для этого, но не знаю, как это реализовать.

Ответы [ 3 ]

1 голос
/ 30 ноября 2010

Могу ли я предложить:

paste -d, file1 file2 file3

Для обработки большого количества файлов, максимум 40 на выходной файл (не проверено, но близко):

xargs -n40 files... echo >tempfile
num=1
for line in $(<tempfile)
do
    paste -d, $line >outfile.$num
    let num=num+1
done
0 голосов
/ 07 декабря 2010

Имеются 3 файла, содержащие следующие данные:

file1.txt

Heading 1
Text 1
Text 2

file2.txt

Heading 2
Text 1

file3.txt

Heading 3
Text 1
text 2
Text 3

Ожидаемые результаты:

Heading 1,Text 1,Text 2 
Heading 2,Text1 
Heading 3,Text 1,text 2,Text 3

Это достигается с помощью программы createcsv.awk, приведенной ниже, которая вызывается как

gawk -f createcsv.awk file1.txt file2.txt file3.txt

createcsv.awk

{
  if (1 == FNR) {
     # It is the first line of a new file
     if (csvline != "") {
       # First file or empty files we can ignore
       print csvline;
     }
     csvline = "";
     delimiter = "";
  }
  csvline = csvline delimiter $0;
  if ("" == delimiter) { delimiter="," }
}
END{
 print csvline;
}
0 голосов
/ 30 ноября 2010

Это примерно то, что вы опубликовали с некоторыми улучшениями.

for text in *
do
    awk 'BEGIN {q="\""; print q}
         NR==1 {
                gsub(" "," ")    # why?
                gsub("Title: *","")
                print
               }
         NR>1  {
                gsub(" "," ")    # why?
                gsub("Content: *","")
                gsub(q,q q)
                print
               }

         END {print q}' "$text" >> ../final
done

Edit:

Если у вас есть набор файлов, состоящий всего из двух строк, попробуйте это:

sed 'N;s/\n/,/' file*.txt

Если файлы содержат более двух строк, то каждая пара строк будет помещена в одну строку, разделенную запятой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...