Добавление столбца в несколько файлов (более 900) с помощью #SBATCH - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь добавить столбец в файл:

1       12098   12258   0.00
1       12553   12721   1.37
1       13331   13701   34.69
1       30334   30503   0.00
1       35045   35544   0.00
1       35618   35778   0.00
1       69077   70017   0.24
1       324294  324394  0.68
1       324427  325605  3.18

, поэтому он выглядит так:

1       12098   12258   unknown   0.00
1       12553   12721   unknown   1.37
1       13331   13701   unknown   34.69
1       30334   30503   unknown   0.00
1       35045   35544   unknown   0.00
1       35618   35778   unknown   0.00
1       69077   70017   unknown   0.24
1       324294  324394  unknown   0.68
1       324427  325605  unknown   3.18

Мне удалось сделать это с помощью этой команды:

awk '$3 = $3 FS "unknown"' <file> > <new_file>

Однако у меня есть более 900 файлов, которые мне тоже нужно сделать, и каждый раз выводить в новый файл. Я нахожу awk сложным для понимания, и мне было интересно, есть ли способ сделать это, используя скрипты #SBATCH или любой другой метод для нескольких файлов одновременно?

Я довольно новичок в переполнении стека, поэтому любая помощь будет с благодарностью! Спасибо!

Ответы [ 2 ]

4 голосов
/ 27 апреля 2020

Вот альтернативное решение sed для внесения этого изменения и сохранения изменений в строке:

sed -E -i.bak 's/[^[:blank:]]+$/unknown &/' *.txt
1 голос
/ 27 апреля 2020

РЕДАКТИРОВАТЬ: Добавление решения в соответствии с комментариями OP для сохранения вывода в выходных файлах попробуйте следующее.

awk '
FNR==1{
  close(out_file)
  sub(/\./,"_new&",FILENAME)
  out_file=FILENAME
}
{
  $NF="unknown" OFS $NF
  print > (out_file)
}'  *.bed


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

awk '{$NF="unknown" OFS $NF} 1'  Input_file

ИЛИ с GNU awk последние версии попробуйте:

gawk -i inplace -v INPLACE_SUFFIX=.bak '{$NF="unknown" OFS $NF} 1'  Input_file(s)


Чтобы сделать пробелы выглядят хорошо, вы можете добавить column к вышеприведенной команде:

awk '{$NF="unknown" OFS $NF} 1'  Input_file | column -t

ИЛИ с GNU awk последние версии попробуйте:

gawk -i inplace -v INPLACE_SUFFIX=.bak '{$NF="unknown" OFS $NF} 1'  Input_file | column -t
...