Я сделал это с помощью awk, grep и sed. Предполагая, что в исходном файле нет конечных пробелов.
awk 'NR>1&&/>/{print ""}{printf " %s", $0}END{print ""}' file |grep chr|sed 's/^ //' |sed 's/^.*chr/>chr/' |awk 'BEGIN{OFS="\n";}{print $1,$2,$3,$4}'
Во-первых, сгруппируйте начальные строки с помощью '>' и предваряйте каждое поле пробелом
>text chr1 AAA BBA AAA
>additional text chr2 ABA AAA CCC TTT
>some text chr3 TTT CCC TCT
>no good text 1 3 AAA CCC TCT
>unimportant text 2 3 3 ACC CCC TCT
Во-вторых, отфильтруйте все строки, содержащие подстроку "chr"
>text chr1 AAA BBA AAA
>additional text chr2 ABA AAA CCC TTT
>some text chr3 TTT CCC TCT
в-третьих, удалить все начальные пробелы
>text chr1 AAA BBA AAA
>additional text chr2 ABA AAA CCC TTT
>some text chr3 TTT CCC TCT
в-четвертых, удалить все символы между ">" и "chr"
>chr1 AAA BBA AAA
>chr2 ABA AAA CCC TTT
>chr3 TTT CCC TCT
и, наконец, используйте awk для печати всех строк с "\n" в качестве разделителя выходного файла
>chr1
AAA
BBA
AAA
>chr2
ABA
AAA
CCC
>chr3
TTT
CCC
TCT
Если вы хотите вывести список всех файлов, имя которых начинается с t_test_
и имеет номер, вы можете использовать:
ls t_test_[0-9]*
[0-9]
— это класс символов, который соответствует любому числу, а *
означает «один или несколько раз».
Рассматривали ли вы возможность использования команды |grep
для помощи вашему ls
?
Например:
ls |grep t_test_type_yyyyymmdd.csv
grep
— очень мощный инструмент для такого рода проверок; больше информации о команде grep
здесь :https://www.redhat.com/sysadmin/how-to-use-grep.