Разделить .txt файл на отдельные файлы, взяв имя из одного столбца и содержимое из другого? - PullRequest
1 голос
/ 08 мая 2020

Прошу прощения, если об этом уже спрашивали. Я осмотрелся и нашел только похожие вопросы, которые мне не помогли.

У меня есть файл .txt с разделителями табуляцией и двумя столбцами, которые я хотел бы разделить. Мне нужно, чтобы имена новых файлов основывались на первом столбце, а содержимое каждого файла было содержимым второго столбца. Например, у меня был бы Name1.txt, содержащий строку word1, другой файл с именем Name2.txt, содержащий word2, и так далее. Я использую Ubuntu 18.04 и хотел бы, чтобы это было сделано из командной строки.

Name1   word1
Name2   word2
Name3   word3

В настоящее время я разделил файл .txt на отдельные файлы со следующим кодом:

split -1 largefile.txt

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

Name1   word1 

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Другой awk:

$ awk '{f=$1 ".txt";print $2 >> f;close(f)}' file

Объяснение:

$ awk '{
    f=$1 ".txt"     # form the filename
    print $2 >> f   # append to file in case there are non-unique $1s
    close(f)        # close file to avoid running out of fds
}' file
1 голос
/ 08 мая 2020

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

awk '
{
  outfile=$1
  if(outfile!=prev){
    close(outfile)
  }
  print $2 > (outfile".txt")
  prev=$1
}
' Input_file

Пояснение: Добавление подробного объяснения.

awk '                           ##Starting awk program from here.
{
  outfile=$1                    ##Creating variable oufile which stores first field of current line.
  if(outfile!=prev){            ##Checking condition if outfile value is NOT equal to prev variable then do following.
    close(outfile)              ##Then closing outfile(output file) in backend, this step is to avoid error of too many opened files.
  }
  print $2 > (outfile".txt")    ##Printing current line 2nd field to outfile with .txt adding to it.
  prev=$1                       ##Creating variable prev which has 1st field value of current line.
}
' Input_file                    ##Mentioning Input_file name here.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...