Вывести строку в файл с тем же именем, что и n-й столбец - PullRequest
1 голос
/ 03 февраля 2020

Предположим, у меня есть это.

24  Monkey  86  Cat
5743    Fish    6   Dog
abc Monkey  76  Dog
56  Dog 44  Fish
vfg Dog f45 Cat

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

Обезьяна

24  Monkey  86  Cat
abc Monkey  76  Dog

Fi sh

5743    Fish    6   Dog

Собака

56  Dog 44  Fish
vfg Dog f45 Cat

Я бы хотел обрабатывать бесконечно возможные имена, а не указывать их вручную, как это

awk '{ if ( $2=="dog" ) { print $0; } }'

Не уверен, как использовать $ 2 в качестве имени выходного файла. Возможно ли это?

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Не могли бы вы попробовать следующее.

awk '
{
  close(out_file)
  out_file=$2
  print >> (out_file)
}
' Input_file
0 голосов
/ 03 февраля 2020

Это будет делать то, что вы собираетесь.

#!/bin/bash

for animal in $( awk '{ print $2}' animals.txt | sort | sort -u )
do
    awk -v animal="$animal" '$2 == animal{print $0}' animals.txt > "${animal}_list.txt"
done

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...