Удаление только части символьной строки в txt файле - строка chr
Я хотел бы удалить строки «chr» в следующем текстовом файле с помощью bash:
FO538757.1 chr1:183937
AL669831.3 chr1:601436
AL669831.3 chr1:601667
AL669831.3 chr1:609395
AL669831.3 chr1:609407
AL669831.3 chr1:611317
Итак, конечный файл выглядит так:
FO538757.1 1:183937
AL669831.3 1:601436
AL669831.3 1:601667
AL669831.3 1:609395
AL669831.3 1:609407
AL669831.3 1:611317
Я проверил предыдущие темы и попробовал:
sed 's/^chr//' awk 'BEGIN {OFS=FS="\t"} {gsub(/chr1/,"1",$2)}2'
ни один из них не работал. Есть ли здесь лучший вариант, чем awk?
Спасибо!
4 ответа
Я подозреваю, что все, что вам действительно нужно, это:
sed 's/chr//' file
Вы можете сделать это довольно легко с помощью
sed
и два выражения, (1) первое для удаления
chr
а второй - для удаления начальных пробелов, например
sed -e 's/chr//' -e 's/^[[:blank:]]*//' file
Пример использования / вывода
С вашим вводом в файл с именем
file
, вам придется
$ sed -e 's/chr//' -e 's/^[[:blank:]]*//' file
FO538757.1 1:183937
AL669831.3 1:601436
AL669831.3 1:601667
AL669831.3 1:609395
AL669831.3 1:609407
AL669831.3 1:611317
С вашими показанными образцами попробуйте следующее. Простое объяснение: замена начального chr на NULL во втором поле и печать строки, что приведет к восстановлению текущей строки, и начальные пробелы также будут удалены из строки.
awk '{sub(/^chr/,"",$2)} 1' Input_file
Если ваш Input_file разделен табуляцией и имеет табуляции в начале файла, попробуйте следующее:
awk 'BEGIN{FS=OFS="\t"} {sub(/^chr/,"",$3);sub(/^\t+/,"")} 1' Input_file
С помощью
bash
оболочка с расширением параметров и
mapfile
он же
readarray
#!/usr/bin/env bash
shopt -s extglob
mapfile -t array < file.txt
array=("${array[@]##+([[:space:]])}")
printf '%s\n' "${array[@]/chr}"
Внутри скрипта
extglob
должен быть включен, но в командной строке он может быть уже включен, поэтому в одну строку
mapfile -t array < file.txt; array=("${array[@]##+([[:space:]])}"); printf '%s\n' "${array[@]/chr}"
Это будет очень медленно для большого набора данных / файлов, jfyi