Распечатать первый столбец из нескольких файлов, используя awk - PullRequest
1 голос
/ 01 ноября 2019

У меня 20 файлов, я хочу напечатать первый столбец каждого файла в отдельный файл. Мне нужно 20 выходных файлов.

Я попробовал следующую команду, но эта команда выводит весь вывод в один файл.

awk '{print $1}' /home/gee/SNP_data/20* > out_file

записать вывод в разные файлы, у меня 20 входных файлов

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Awk имеет встроенный оператор перенаправления, вы можете использовать его как:

awk '{ print $1 > ("out_" FILENAME) }' /home/gee/SNP_data/20*

или, что еще лучше:

awk 'FNR==1 { close(f); f=("out_" FILENAME) } { print $1 > f }' /home/gee/SNP_data/20*

Бывший пример использования оператора перенаправления, последнийкак правильно его использовать.

1 голос
/ 01 ноября 2019

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

awk '
FNR==1{
  if(file){
    close(file)
  }
  file="out_file_"FILENAME".txt"
}
{
  print $1 > (file)
}
' /home/gee/SNP_data/20*

Объяснение: Добавление пояснения к вышеуказанному коду.

awk '                                     ##Starting awk program here.
FNR==1{                                   ##checking condition if FNR==1 then do following.
  if(file){                               ##Checking condition if variable file is NOT NULL then do following.
    close(file)                           ##Using close to close the opened output file in backend, to avoid too many opened files error.
  }                                       ##Closing BLOCK for if condition.
  file="out_file_"FILENAME".txt"          ##Setting variable file value to string out_file_ then FILENAME(which is Input_file) and append .txt to it.
}                                         ##Closing BLOCK for condition for FNR==1 here.
{
  print $1 > (file)                       ##Printing first field to variable file here.
}
' /home/gee/SNP_data/20*                  ##Mentioning Input_file path here to pass files here.


2-е решение: Если вам нужно получить выходные файлы, такие как output_file_1.txt и так далее, попробуйте выполнить следующее. Я создал переменную awk с именем out_file, где вы также можете изменить имя вашего выходного файла (в соответствии с вашими потребностями).

awk -v out_file="Output_file_" '
FNR==1{
  if(file){
    close(file)
  }
  ++count
  file=out_file count".txt"
}
{
  print $1 > (file)
}
' /home/gee/SNP_data/20*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...