Isso pode funcionar para você (GNU sed):
sed -i '/^>/s/\s.*//' file
Eu tenho o cabeçalho começando com '>' e eu quero corrigir o cabeçalho, mantendo a primeira palavra e removendo outro mostrado como em output.txt e imprimi-lo
input.txt
>AGAJ01065549.1 scaffold:Xipmac4.4.2:AGAJ01065549.1:1:500:1 REF
CGCCAGGTGTCTGGCGTAATAGCGCCAGCGCCAGGTGTCATATACGTAATAGCGCCAGGT
>RGAMMT01065456.1 scaffold:Xipmac4.4.2:AGAJ01065595.1:1:500:1 REF
GACTAGTTTTTACATATAGTAATGGTTATTCGGAAGTGTACAGACGTTTTCAGGTTTTTT
TTTGGTAGGGGTTGAGGTGTTGAGGTGAGGGGACTATGTGGAGGGAACTTTCCATAGAGG
output.txt
>AGAJ01065549.1
CGCCAGGTGTCTGGCGTAATAGCGCCAGCGCCAGGTGTCATATACGTAATAGCGCCAGGT
>RGAMMT01065456.1
GACTAGTTTTTACATATAGTAATGGTTATTCGGAAGTGTACAGACGTTTTCAGGTTTTTT
TTTGGTAGGGGTTGAGGTGTTGAGGTGAGGGGACTATGTGGAGGGAACTTTCCATAGAGG
Você pode fazer isso canalizando o texto pelo awk
awk '{print $1}' input.txt
Isto imprime a primeira entrada de cada linha (as entradas são separadas por espaços).
Semelhante à resposta usando awk
é cut
:
cut -d' ' -f 1 input.txt > output.txt
A opção -d
define o delimitador como um espaço e -f
seleciona o primeiro campo.
No entanto, você também pode usar sed
:
sed 's,^\([^ ]\+\) .*,,' input.txt > output.txt
Este comando substitui uma expressão. Parece o início de uma linha e copia todos os caracteres para um buffer que não seja espaço em branco. Além disso, ele corresponde a um espaço em branco e a qualquer outro caractere. sed
substitui essa linha pelo conteúdo do buffer.