Нет вывода при циклическом просмотре множества файлов с использованием скрипта awk

У меня есть 50 текстовых файлов, которые выглядят так. Все имена файлов начинаются с ENSG00000...

"number"    "variant_id"    "gene_id"   "tss_distance"  "ma_samples"    "ma_count"  "maf"   "pval_nominal""slope"   "slope_se"  "hg38_chr"  "hg38_pos"  "ref_allele"    "alt_allele"    "hg19_chr"  "hg19_pos"  "ID"    "new_MAF"   "CHROM" "POS"   "REF"   "ALT"   "A1"    "OBS_CT"    "BETA"  "SE"    "P" "SD"    "Variance"
"14"    6253456 "chr1_17726150_G_A_b38" "ENSG00000186715.10"    955913  68  78  0.0644628   0.895156    0.0139683   0.105945    "chr1"  17726150    "G" "A" "chr1"  18052645    "rs260514:18052645:G:A0.058155  1   18052645    "G" "A" "G" 1597    0.0147047   0.0656528   0.822804    2.62364886486368    6.88353336610048

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

number  variant_id  gene_id  tss_distance   ma_samples  ma_count    maf pval_nominal slope  slope_se    hg38_chr    hg38_pos    ref_allele  alt_allele  hg19_chr    hg19_pos    ID  new_MAF CHROM   POS REF ALT A1  OBS_CT  BETA    SE P    SD Variance
14  6253456 chr1_17726150_G_A_b38   ENSG00000186715.10  955913  68  78  0.0644628   0.895156    0.0139683   0.105945    chr1    17726150    G   A   chr1    18052645    rs260514:18052645:G:A0.058155   1   18052645    G   A   G   1597    0.0147047   0.0656528   0.822804    2.62364886486368    6.88353336610048

Однако я хочу применить awk-скрипт ко всем 50 файлам через цикл. Однако, когда я использую приведенный ниже сценарий, я не получаю никаких результатов.

#!/bin/bash
#PBS -N Edit
#PBS -l walltime=01:00:00
#PBS -l nodes=1:ppn=8
#PBS -l vmem=10gb
#PBS -m bea

for i in ENSG00000*; do
    awk '{ gsub(/"/, ""); print }' > $i.out
done

Пожалуйста, обновите вопрос, чтобы показать ваш awk вызов для одного файла

markp-fuso 21.11.2022 00:31

Вы забыли ввести awk, например. awk '{ gsub(/"/, ""); print }' "${i}" > $i.out

Andre Wildberg 21.11.2022 00:31

Кстати (не связанный с вашим вопросом), вы также забыли уловить случай, что у вас нет файлов для обработки в вашем каталоге.

user1934428 21.11.2022 13:59
Как настроить Tailwind CSS с React.js и Next.js?
Как настроить Tailwind CSS с React.js и Next.js?
Tailwind CSS - единственный фреймворк, который, как я убедился, масштабируется в больших командах. Он легко настраивается, адаптируется к любому...
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Переключение светлых/темных тем
Переключение светлых/темных тем
В Microsoft Training - Guided Project - Build a simple website with web pages, CSS files and JavaScript files, мы объясняем, как CSS можно...
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
0
3
52
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вы забыли указать входной файл для сканирования awk. Пытаться:

for i in ENSG00000*; do
    awk '{ gsub(/"/, ""); print }' $i > $i.out
done

Просто быстрое редактирование должно быть

HKJ3 21.11.2022 14:28

Для i в ENSG00000*; do awk '{gsub(/"/, ""); print }' "${i}" > "${i}"_out.txt готово

HKJ3 21.11.2022 14:28

Возможно, это все, что вам нужно

sed -i '' 's/"//g' ENSG00000*

Если вы хотите, чтобы файл редактировался на месте.

Использование awk только для удаления определенных символов — это излишество. Почему бы вам просто не сделать

tr -d '"' <$i >$i.out

?

Предлагаю скрипт awk без зацикливания:

awk -i inplace '{ gsub(/"/, ""); print }' ENSG00000*

Но решение sed выше является лучшим:

sed -i '' 's/"//g' ENSG00000*

Другие вопросы по теме