Форматирование столбцов txt файла (Bash) - PullRequest
0 голосов
/ 04 августа 2020

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

"","SNPID","chr","position","coded_all","noncoded_all","strand_genome","beta","SE","pval","AF_coded_all","HWE_pval","callrate","n_total","imputed","used_for_imp","oevar_imp","cases_hwe","controls_hwe","cases_maf","controls_maf","ORIG_RSID","ORIG_oevar_imp"
"1","rs12238997",1,693731,"G","A","+",-0.38288,0.217017,0.0671875,0.136449469720989,0.830832,1,3558,0,1,0.68019,1,0.717247,0.111293,0.137696,"1:693731",0.68523
"2","rs55727773",1,706368,"G","A","+",0.0495436,0.184018,0.787664,0.495455309418386,0.737299,1,3558,0,1,0.37193,1,0.731107,0.501533,0.495154,"1:706368",0.374977
"3","rs144155419",1,717587,"A","G","+",-0.610968,0.783633,0.40289,0.01515919857503,1,1,3558,0,1,0.53527,1,1,0.0109798,0.0153663,"1:717587",0.5463
"4","1:718624",1,718624,"G","C","+",-2.49538,4.33782,0.45716,0.00158445978704298,1,1,3558,0,1,0.44799,1,1,0.000520833,0.00163717,"1:718624",0.537329
"5","1:718625",1,718625,"G","T","+",-2.49432,4.33666,0.457265,0.00158445978704298,1,1,3558,0,1,0.44808,1,1,0.000520833,0.00163717,"1:718625",0.537482
"6","rs564367954",1,720984,"G","T","+",0.152295,1.9944,0.939879,0.00164619033597763,1,1,3558,0,1,0.38407,1,1,0.00183333,0.00163691,"1:720984",0.418335

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

SNPID   chr position    coded_all   noncoded_all    strand_genome   beta    SE  pval    AF_coded_all    n_total oevar_imp
1:10177_A/AC_1:10177    1   10177   AC  A   +   -0.1885 0.3084  0.5411  0.5 5552    0.00451
1:10235_T/TA_1:10235    1   10235   TA  T   +   -6.782  18.56   0.7149  0   5552    0.00020
1:10352_T/TA_1:10352    1   10352   TA  T   +   0.2509  0.2392  0.2942  0.5 5552    0.00721
1:10539_C/A_1:10539 1   10539   A   C   +   -1.832  5.502   0.7392  0   5552    0.00420
1:10616_CCGCCGTTGCAAAGGCGCGCCG/C_1:10616    1   10616   C   CCGCCGTTGCAAAGGCGCGCCG  +   1.213   1.308   0.3537  1   5552    0.00778
1:10642_G/A_1:10642 1   10642   A   G   +   5.491   14.83   0.7111  0   5552    0.00012
1:11008_C/G_1:11008 1   11008   G   C   +   -0.3325 0.3133  0.2886  0   5552    0.01250
1:11012_C/G_1:11012 1   11012   G   C   +   -0.3314 0.3132  0.2901  0   5552    0.01251
1:11063_T/G_1:11063 1   11063   G   T   +   0.1657  14.14   0.9906  0   5552    0.00019

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

1 Ответ

0 голосов
/ 04 августа 2020

Есть два способа сделать это

  1. предварительно обработать CSV-файл с помощью sed '/"/!s/,/ /g;s/","/ /g; s/"//g', а затем использовать column -T <filename>

  2. Однако , наиболее эффективным было бы использование csvkit. Сначала установите csvkit: sudo pip install csvkit (вам нужно будет установить python3 и python3 -pip)

В наборе есть различные инструменты, такие как csvcut, который позволяет просматривать и вырежьте интересующие вас столбцы. Например, csvcut -n file.csv дает доступные столбцы (обратите внимание, я скопировал ваши образцы данных в file.csv)

$ csvcut -n file.csv 
  1: 
  2: SNPID
  3: chr
  4: position
  5: coded_all
  6: noncoded_all
  7: strand_genome
  8: beta
  9: SE
 10: pval
 11: AF_coded_all
 12: HWE_pval
 13: callrate
 14: n_total
 15: imputed
 16: used_for_imp
 17: oevar_imp
 18: cases_hwe
 19: controls_hwe
 20: cases_maf
 21: controls_maf
 22: ORIG_RSID
 23: ORIG_oevar_imp

вырезание 1-го и нескольких других столбцов и их табулирование выглядит так:

$ csvcut -c 2,3,4,5,6 file.csv  | csvlook
| SNPID       |  chr | position | coded_all | noncoded_all |
| ----------- | ---- | -------- | --------- | ------------ |
| rs12238997  | True |  693,731 | G         | A            |
| rs55727773  | True |  706,368 | G         | A            |
| rs144155419 | True |  717,587 | A         | G            |
| 1:718624    | True |  718,624 | G         | C            |
| 1:718625    | True |  718,625 | G         | T            |
| rs564367954 | True |  720,984 | G         | T            |


Вы можете использовать csvformat для столбцов на основе выбранного вами разделителя. Например, для вывода, разделенного табуляцией, вот команда и вывод

$ csvcut -c 2,3,4,5,6 file.csv  | csvformat -T
SNPID   chr position    coded_all   noncoded_all
rs12238997  1   693731  G   A
rs55727773  1   706368  G   A
rs144155419 1   717587  A   G
1:718624    1   718624  G   C
1:718625    1   718625  G   T
rs564367954 1   720984  G   T

Надеюсь, это полезно. теперь вы можете написать сценарий, если хотите. Конечно, вам может потребоваться немного настроить данные в соответствии с вашими потребностями.

Подробнее о csvkit можно узнать здесь: https://csvkit.readthedocs.io/en/latest/tutorial/1_getting_started.html#installing -csvkit

Всего наилучшего !

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