2009-12-19 5 views
1

Я хотел бы написать небольшой скрипт, используя стандартные инструменты для сценариев linux (sed, awk и т. Д.) Для создания одного выходного файла на строку ввода. Например, учитывая следующий входной файл 'input':Преобразование stdin в один файл в строке

line1 
line2 
line3 

Я хотел был бы запустить команду.

$ cat input | my_prog 

Где my_prog 'представляет собой скрипт, который создает три выходных файлов, Out.1, Вых.2, out.3

$ cat out.1 
line1 

$ cat out.2 
line2 

$ cat out.3 
line3 
+0

Это часть конвейер команд, которые используют sed и awk. Мне было интересно, удалось ли sed сопоставить каждую строку ввода с отдельным выходным каналом. Я думаю, что я буду использовать решение ennuikiller, заменив «echo $ line> out. $ Count» на мой полный конвейер команд sed. Спасибо! – user74838

ответ

2
count=0 
for line in $(cat input) 
do 
echo $line > out.$count 
let count=count+1 
done 
+3

Это разбивает каждую строку на слово. Вы должны сделать 'while read -r line ... done

1
perl -ne 'open my $fh, ">out.$." && print $fh $_' input.txt 
1

с использованием AWK

awk '{print $0 > "out_"++d".txt"}' file 
+0

Я не мог заставить это работать. – user74838

+0

как вы его выполняете? – ghostdog74

+0

из командной строки. – user74838

0
#!/bin/bash 

while IFS= read -r line; do 
    echo "$line" > out.$((++i)) 
done < /path/to/input