Одновременное перемещение строк в отдельные файлы [дубликат]

0
05.07.2018, 20:32
2 ответа

Чтобы получить всю строку, которая начинается сa:

grep '^a' infile.txt >a.txt

Чтобы получить все строки, которые не начинаются с «а»:

grep '^[^a]' infile >bcd.txt   # or grep -v '^a' infile.txt >bcd.txt

Выражение [^...]означает «любой символ, не входящий в этот набор символов», и набор содержит единственный a.

Комбинированное действие с использованиемawk:

awk '/^a/ { print >"a.txt"; next } { print >"bcd.txt" }' infile.txt

Программа awkзапускает первый блок для любой строки, начинающейся с a, и второй блок для всех остальных строк (, а не строк a, из-за оператора nextв первом блоке. ). Оператор print >filenameнапечатает текущую строку в указанный файл.

0
28.01.2020, 04:18

Если вы хотите, чтобы строки, отличные от -a, были отправлены на bcd.txt, просто инвертируйтеgrep:

grep    '^a' infile.txt > a.txt
grep -v '^a' infile.txt > bcd.txt

Другим вариантом, использующим только одну команду, будет awk:

awk '/^a/ { print > "a.txt" } ! /^a/ { print > "bcd.txt" }' < input

Немного изменено, это выглядит так:

awk '
    /^a/ { print > "a.txt" } 
  ! /^a/ { print > "bcd.txt" }' 
  < input

... где строки, начинающиеся с a, входят в первый блок и записываются (с добавлением )к a.txt, а строки, начинающиеся с , а не , начинаются с aво второй блок и записываются (с добавлением )к bcd.txt.

0
28.01.2020, 04:18

Теги

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