Разделить файл по строкам, удалив первое поле и используя его как имя для полученного фрагмента

Cambie la línea ifa:

if [ "$filename" != even ] && [ "$filename" != odd ]

En el shell bash, todo el script,(es decir, de fora doneinclusive ), se puede simplificar a:

GLOBIGNORE=even:odd ; printf "%s\n" *

Otro bashmétodo:

shopt -s extglob  # only needs to be done once, if not set already.
printf "%s\n" !(odd|even)
0
31.01.2017, 18:30
3 ответа
while read -r tag line; do
    printf '%s\n' "$line" >"$tag".txt
done <text.in

Когда вы читаете две переменные с помощью read, первое слово помещается в первую переменную, а остальная часть строки - во вторую.

Что считать "словом", зависит от значения параметра $IFS. По умолчанию read разбивает строку на слова на основе пробелов, табуляции или новой строки.

Цикл использует это для вывода строки (за вычетом первого слова, или "тега") в файл, имя которого берется из начала строки.

1
29.04.2021, 00:04

удалось это сделать:

#!/bin/bash

while read -r filename content ; do
    printf '%s\n' "$content" >> "${filename}.txt"
done < some_file.txt
0
29.04.2021, 00:04

Нет необходимости в bash :

awk '{file = $1".txt"; $1=""; print substr($0,2) > file; close(file)}' a_text_file
  • Получить файл из первого столбца, добавьте к нему .txt .
  • Удалите первый столбец.
  • Распечатать оставшиеся столбцы (без начального пробела) в файл .

Между тем, об этом while цикле в bash :

$ (echo first; echo -n second) | while read line; do echo $line; done
first
$ 

Ммм, тихая потеря данных. Лучше убедитесь, что есть всегда окончательные символы новой строки, а?

1
29.04.2021, 00:04

Теги

Похожие вопросы