После некоторой работы было найдено решение. В об/мин были выполнены несколько вызовов dos2unix. Мой коллега смог решить, что verson dos2unix, который был установлен, имел некоторые проблемы.
После обновления до последней версии u2dtmp* исчезли файлы.
Понятия не имею, почему люди используют 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
Замена одной подстроки на другую есть явно работает для sed. Если вы хотите, чтобы это было в awk, я предполагаю, что вы хотите выполнить некоторую дополнительную обработку с помощью awk. Для этого вам нужно просто использовать разделитель полей регулярного выражения:
awk -F'(**| )' '{.you code here.; print $10}'
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 +
Это должно быть неловко? Почему бы не кошачий файл | tr '**' ' '
Просто заменив ** на три пробела
awk -F'**' 'BEGIN{OFS=" ";} {print $1,$2}' file
используйте ' **' в качестве разделителя и установите три пробела в качестве разделителя вывода