Скрипт UNIX Чтобы прочитать файл и создать файл для каждой строки

Вы Вы можете использовать приложение Disk Utility в Linux для запуска теста SMART, который может определить состояние жесткого диска.

-1
13.10.2018, 01:59
2 ответа
$cat mainfile
My name is hello world
My Name is not hello world

Вbash

#!/bin/bash
cat mainfile | while IFS= read line ;do 

name=$(echo ${line} | awk '{print $4}')

echo "${line}" >> ${name} 
done

Вcsh

#!/bin/csh
foreach line ( "`cat mainfile`" )
set name = `echo ${line} | awk '{print $4}'`

    echo "${line}" >> $name
end

Чтобы создать файлы для всех слов в основном файле

#!/bin/bash
cat mainfile | while IFS= read line ;do

     for word in $line; do

   echo "${line}" >> ${word} 
  done
done
2
28.01.2020, 05:07

Строки файла должны быть записаны в файлы, имена которых берутся из четвертого поля, разделенного пробелом -. Слово «запись» относится к строке. Слово «столбец» иногда используется вместо «поля», и здесь можно было бы использовать слово «слово» вместо «поле». И «запись», и «поле» являются более общими, чем «строка» и «столбец» (или «слово» ). В частности, строка представляет собой запись, разделенную новой строкой -, а «поле» часто представляет собой столбец или слово, разделенное пробелами -, внутри записи.

Сawk:

awk '{ print >$4 }' <file.txt

Это запустит оператор printодин раз для каждой строки входного файла file.txt. >$4означает, что вывод перенаправляется в файл, имя которого указано в четвертом поле строки. Для первой строки создается файл hello, а для второй строки — файл not.

$ cat hello
My name is hello world
$ cat not
My Name is not hello world

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

Если в строке менее четырех слов, это вызовет ошибку.

awkиспользует новые строки в качестве разделителя записей по умолчанию, а пробелы (вкладки или пробелы )в качестве разделителей полей, если не указано иное.


Расширенныйawk-ness:

При выполнении такого рода перенаправления в программе awkawkбудет держать файлы открытыми до выхода после считывания всех данных. Для каждого открытого файла требуется один файловый дескриптор, и их количество ограничено. Если необходимо записать много файлов , рекомендуется явно закрыть файлы:

awk '{ print >>$4; close($4) }' <file.txt

Здесь мы открываем вывод для добавления к (вместо усечения и перезаписи ), записываем текущую строку в файл и закрываем файл.Когда тот же файл открывается для вывода во второй раз (, поскольку четвертое поле оказывается одинаковым для двух или более строк ), данные добавляются. Если бы мы использовали >$4, новые данные перезаписали бы старые. Это не проблема в первой программе вверху, поскольку мы никогда явно не закрываем файлы.

Сценарий (или что-либо еще, вызывающее awkпрограмму ), должны были сделать так, чтобы выходные файлы были пустыми или -несуществующими, прежде чем запускать это, в зависимости от обстоятельств.

Удаление файлов helloи notи трехкратный запуск вышеуказанной команды:

$ rm hello not
$ awk '{ print >>$4; close($4) }' <file.txt
$ awk '{ print >>$4; close($4) }' <file.txt
$ awk '{ print >>$4; close($4) }' <file.txt
$ cat hello
My name is hello world
My name is hello world
My name is hello world
$ cat not
My Name is not hello world
My Name is not hello world
My Name is not hello world
1
28.01.2020, 05:07

Теги

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