Извлеките каждые 2 строки из файла 40 линий и создайте новый файл

Ваш Intel Core 2 Duo CPU T7500 - это 64-разрядный процессор. Итак, если вы установили 64-битную ОС, вы можете попробовать make target linux-x86-64 или, если 32-битная версия, попробуйте linux-x86-sse2 .

2
03.02.2019, 01:46
3 ответа

Не так умно, как awk-версия, но вот альтернатива.

497844.txt — это имя вашего файла. Я использовал номер вопроса

for f in `cut -f1 -d. 497844.txt | sort | uniq`
do
    group=`grep $f.Group 497844.txt`
    fn=`echo $group| cut -f2 -d" "`
    grep ^$f 497844.txt > $fn
done

Объяснение.

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

Затем мы извлекаем каждую строку с этим номером группы и перенаправляем вывод в полученный выше файл.

0
27.01.2020, 21:52

Сawk:

$ awk -v FS="\t" '$1 ~ /Group/ { file = $2 } { print $0 > file }' input.txt

awkпроверяет, есть ли Groupв первом столбце. В этом случае мы сохраняем значение второго столбца в переменной file.

После проверки вся строка печатается и перенаправляется >в файл с именем, хранящимся в переменной file.

6
27.01.2020, 21:52

Мы можем использовать редактор sedи выполнить проход 2 -по входному файлу. Первый проход генерирует список команд sed, которые будут использоваться во втором проходе для создания требуемого вывода.

$ sed -ne '
      s/.*[[:blank:]]//
      s|.*|/&/{N;w &\n}|w sed_code
      n
 '  input-file.txt 

Тогда это второй проход. Предполагая, что создаваемые имена файлов не содержат специальных символов регулярных выражений.

$ sed -nf sed_code input-file.txt

Мы также можем использовать Perl для этой задачи:

 $ perl -aMautodie -pe '
    open my $fh, ">", $F[1];
    $_.= <>;
    select $fh;
 ' input.txt
1
27.01.2020, 21:52

Теги

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