Я пытаюсь разделить запись с помощью подчеркивания. Изначально речь шла о _
и .
в качестве FS и только для первого столбца. Но прямо сейчас кажется, что никакое разделение не работает вообще?
cat test_file.tsv
mg.reads.per.gene_bcsZ_A1.tsv contig_21128 476
mg.reads.per.gene_bcsZ_A1.tsv contig_3712 1774
mg.reads.per.gene_bcsZ_A2.tsv contig_38480 184
mg.reads.per.gene_bcsZ_A2.tsv contig_62779 1154
mg.reads.per.gene_bcsZ_A4.tsv contig_115486 113
mg.reads.per.gene_bcsZ_A4.tsv contig_14345 937
mg.reads.per.gene_bcsZ_A5.tsv contig_19362 426
mg.reads.per.gene_bcsZ_A5.tsv contig_53656 31
mg.reads.per.gene_bcsZ_A6.tsv contig_100190 26
mg.reads.per.gene_bcsZ_A6.tsv contig_23343 164
и я пробовал множество вариантов, таких как
awk 'BEGIN { FS = _ } ; {print $0}' test_file.tsv
awk 'BEGIN { FS = '_' } ; {print $0}' test_file.tsv
awk 'BEGIN { FS = "_" } ; {print $0}' test_file.tsv
awk 'BEGIN { FS ="_" } ; {print $0}' test_file.tsv
awk -F'_' '{print $0}' test_file.tsv
awk -F"gene" '{print $0}' test_file.tsv
и это дает неизменный результат. Я ожидал:
mg.reads.per.gene bcsZ A1.tsv contig 21128 476
mg.reads.per.gene bcsZ A1.tsv contig 3712 1774
mg.reads.per.gene bcsZ A2.tsv contig 38480 184
mg.reads.per.gene bcsZ A2.tsv contig 62779 1154
mg.reads.per.gene bcsZ A4.tsv contig 115486 113
mg.reads.per.gene bcsZ A4.tsv contig 14345 937
mg.reads.per.gene bcsZ A5.tsv contig 19362 426
mg.reads.per.gene bcsZ A5.tsv contig 53656 31
mg.reads.per.gene bcsZ A6.tsv contig 100190 26
mg.reads.per.gene bcsZ A6.tsv contig 23343 164
Я пропустил что-то очевидное здесь?
РЕДАКТИРОВАТЬ: да, я сделал: «Распространенной ошибкой является попытка изменить разделители полей в записи, просто установив FS и OFS, а затем ожидая простой «печати» или «печати $0» для печати измененной записи. (руководство по awk, "понимание $0")
РЕДАКТИРОВАТЬ: и для достижения конечной цели (разделение на _ и . только в первом столбце, это работает (по крайней мере, в одной строке, разделенной ";")):
awk 'BEGIN { OFS = "\t" }
{
split ($1, a, "_")
split (a[3], b, "\\.")
print $2, a[2], b[1]
}' test_file.tsv
выход:
contig_21128 bcsZ A1
contig_3712 bcsZ A1
contig_38480 bcsZ A2
contig_62779 bcsZ A2
contig_115486 bcsZ A4
contig_14345 bcsZ A4
contig_19362 bcsZ A5
contig_53656 bcsZ A5
contig_100190 bcsZ A6
contig_23343 bcsZ A6
print $0
распечатать? Вот и вся линия. Если вам нужно первое значение, выполнитеprint $1
. - person Davy M   schedule 17.03.2018_
и, следовательно, 6 столбцов вместо 3 - person crazysantaclaus   schedule 17.03.2018