4

Хорошо, у меня есть файл, содержащий тысячи строк. Каждый на своей линии. Я хочу создать скрипт, который позволит мне взять этот файл, назвать его list.txt , взять элементы из каждой строки и поместить его в отдельные файлы на основе первой буквы или цифры. Например, скажем, первые несколько строк файла выглядят так:

cheese
pizza
pepperoni
lettuce
grahamCrackers
0-0Foods
chicken
lentils
1-2Items

Мне нужно разбить его на эти:

c.txt

cheese
chicken

g.txt

grahamCrackers

l.txt

lettuce
lentils

p.txt

pizza
pepperoni

0.txt

0-0Foods

1.txt

1-2Items

Я хотел бы сделать это с BASH на OS X. Спасибо.

Ох, если это поможет. Элементы в каждой строке НИКОГДА не будут иметь пробела, они всегда будут заключены в одно слово. EG (Никогда не куриный суп, вместо куриного супа)

3 ответа3

5

Вы можете просто использовать gawk и упростить вещи:

gawk '{n=substr($1,0,1); print >> n".txt"}' file.txt
  • n=substr($1,0,1) берет подстроку длины 1, начиная с первой позиции (0) первого поля ($1), и сохраняет ее в переменную с именем n .

  • print >> n".txt" добавит (>>) каждую строку в текстовый файл с именем n.txt (где n - первая буква).

Чтобы сделать то же самое для первых двух букв, просто измените длину substr:

gawk '{n=substr($1,0,2); print >> n".txt"}' file.txt
4

Попробуй это

OLDIFS=$IFS
IFS='
'
typeset -a file
file=($(cat list.txt))
for i in "${file[@]}"; do
    echo $i >> ${i:0:1}.txt
done
IFS=$OLDIFS

Обратите внимание, что часть IFS обычно не требуется. Также я тестировал его на Zsh 4.3.17 на linux и на Bash 4.2.37.

Что он делает, так это объявляет массив, присваивает содержимое файла этому массиву, затем перебирает каждый элемент массива, следовательно, каждая строка и выводит этот элемент в файл с именем первых букв плюс «.txt» добавлен к нему.

0
#!/bin/bash

while read line
do
    firstChar=${line:0:1}
    fileName=${firstChar}.txt
    if [ -e ${fileName} ];then
    touch ${fileName}
     fi
    echo ${line} >> ${fileName}
done < list.txt

Приведенный выше скрипт берет первый символ каждой строки, считанной из файла list.txt . Затем он пытается создать файл с этим символом + ".txt", а затем добавляет каждую строку из list.txt в соответствующий файл символа + ".txt".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .