разделение столбца с помощью awk

После некоторой работы было найдено решение. В об/мин были выполнены несколько вызовов dos2unix. Мой коллега смог решить, что verson dos2unix, который был установлен, имел некоторые проблемы.

После обновления до последней версии u2dtmp* исчезли файлы.

6
23.09.2014, 16:49
5 ответов

Понятия не имею, почему люди используют cat для передачи файла в awk, а ответ tr переводит только один символ в другой, поэтому любой * преобразуется в пробел .

Простое решение awk

awk -F"**" '$1=$1' OFS="\t" file 

Для табуляции между всеми полями

awk 'sub(/\*\*/," "){$1=$1}1' OFS="\t" file

И еще одна

awk 'gsub(/(*| )+/,"\t")' file

Sed-команда

sed 's/[* ]\+/\t/g' file

tr-команда

tr -s '* ' '\t'  < file
6
27.01.2020, 20:26

Замена одной подстроки на другую есть явно работает для sed. Если вы хотите, чтобы это было в awk, я предполагаю, что вы хотите выполнить некоторую дополнительную обработку с помощью awk. Для этого вам нужно просто использовать разделитель полей регулярного выражения:

awk -F'(**| )' '{.you code here.; print $10}'
0
27.01.2020, 20:26
cat text.txt  |awk '{ split($9,a , "**"); printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",$1,$2,$3,$4,$5,$6,$7,$8, a[1], a[2],$10); }'

Выход:

chrXV   234346  234546  snR81   +   SNR81   chrXV   234357  0.0003015891774815342   0.131826816475  +
chrXV   234346  234546  snR81   +   SNR81   chrXV   234385  0.0002208827994288481   0.0118547789578 +
chrXV   234346  234546  snR81   +   SNR81   chrXV   234396  0.0001799579220002955   0.00583993781634    +
chrXV   234346  234546  snR81   +   SNR81   chrXV   234410  0.003451057940295026    0.00352844797952    +
1
27.01.2020, 20:26

Это должно быть неловко? Почему бы не кошачий файл | tr '**' ' ' Просто заменив ** на три пробела

.
1
27.01.2020, 20:26
awk -F'**' 'BEGIN{OFS="   ";} {print $1,$2}' file

используйте ' **' в качестве разделителя и установите три пробела в качестве разделителя вывода

0
27.01.2020, 20:26

Теги

Похожие вопросы