Как я могу добавить столбец значений в файл, который имеет определенное количество строк. У меня есть входной файл, как это:
Входной файл:
SPATA17 1 217947738
LYPLAL1 1 219383905
FAM47E 4 77192838
SHROOM3 4 77660162
SHROOM3 4 77660731
SHROOM3 4 77662248
Выходной файл:
SPATA17 1 217947738 file1
LYPLAL1 1 219383905 file1
FAM47E 4 77192838 file1
SHROOM3 4 77660162 file1
SHROOM3 4 77660731 file1
SHROOM3 4 77662248 file1
В этом случае я хочу добавить Столбец значений до количества строк в файле. Значение остается неизменным, например «file1».
Причина в том, что у меня есть 100 таких файлов. Я не хочу открывать каждый файл и вставлять столбец. Также есть ли способ автоматизировать это, перейдя в каталог и добавив столбец значений. Значение берется из имени файла, которое должно быть добавлено в каждую строку файла в последнем / первом столбце.
источник
sed
наиболее удобен для замены шаблонов и сохранения на месте. Для вашего требования сохранения файла это был относительно удобный вариант. Если вам не нужно записывать обратно в тот же файл, который вы обрабатываете, тоawk
обычно с ним гораздо проще работать.awk
слишком часто отключают входные / выходные разделители полей, поэтому я стараюсь по возможности избегать его использования, делая егоsed
более привлекательным.Давай, почему вы, ребята, рекомендуете эти мощные инструменты, когда есть
paste
команда!С небольшой хитростью, вы можете использовать
paste
для целей ОП. Тем не менее, он не заменит файлы на месте:Это вставит соответствующее имя файла в качестве последнего столбца каждого файла в новый файл
filename.new
источник
paste
безусловно, скрытый драгоценный камень.Вы можете использовать
awk
:источник
FILENAME
это переменнаяawk
, она расширяется до текущего имени файла, которыйawk
обрабатывается. Вы просто делаете это один, кормить все файлыawk
.GNU awk 4.1.0
или позже, вы можете использовать-i
для редактирования на месте. В противном случае вы должны перенаправитьawk
вывод в временный файл, а затем использоватьgrep
для извлечения строки из каждого файла.for file in *; do awk 'BEGIN{OFS="\t"}{print $0, FILENAME}' $file; done