Вырежьте пробелы и дефис из текстового файла

Поскольку ни один из .txt}не является специальным для оболочки (, нет открывающей фигурной скобки ), просто:

rm ~/.txt}* ~/*18Jun22h*

или, если их слишком много, разделить:

rm ~/.txt}*
rm ~/*18Jun22h*
0
20.02.2020, 11:52
3 ответа

Вы можете использовать команду sed для удаления дефиса с пробелом.

sed 's/- //g'

См. приведенный ниже пример

# cat example.txt
VOG0005 - k141_44786_1 - 4.9e-11 41.0 0.0 2e-08 32.4 0.0 2.0 2 0 0 2 2 2 2 -
VOG0005 - k141_46357_20 - 9.2e-44 148.8 1.7 2.4e-32 111.2 0.2 3.0 2 1 1 3 3 3 3 -
VOG0010 - k141_1081_2 - 1.2e-06 27.4 0.5 0.00011 21.0 0.0 2.3 2 0 0 2 2 2 2 -
VOG0010 - k141_17432_67 - 1.2e-07 30.7 0.0 1.7e-07 30.2 0.0 1.3 1 1 0 1 1 1 1 -
VOG0010 - k141_2610_7 - 2.1e-06 26.6 0.0 2.9e-06 26.2 0.0 1.1 1 0 0 1 1 1 1 -

# sed 's/- //g' example.txt
VOG0005 k141_44786_1 4.9e-11 41.0 0.0 2e-08 32.4 0.0 2.0 2 0 0 2 2 2 2 -
VOG0005 k141_46357_20 9.2e-44 148.8 1.7 2.4e-32 111.2 0.2 3.0 2 1 1 3 3 3 3 -
VOG0010 k141_1081_2 1.2e-06 27.4 0.5 0.00011 21.0 0.0 2.3 2 0 0 2 2 2 2 -
VOG0010 k141_17432_67 1.2e-07 30.7 0.0 1.7e-07 30.2 0.0 1.3 1 1 0 1 1 1 1 -
VOG0010 k141_2610_7 2.1e-06 26.6 0.0 2.9e-06 26.2 0.0 1.1 1 0 0 1 1 1 1 -
0
28.04.2021, 23:22

Подобно sed, вы также можете сделать это с помощьюperl:

$ cat File.txt | tr -s " " | perl -pe 's/[[:space:]]-//g' | sponge File.txt
VOG0005 k141_44786_1 4.9e-11 41.0 0.0 2e-08 32.4 0.0 2.0 2 0 0 2 2 2 2
VOG0005 k141_46357_20 9.2e-44 148.8 1.7 2.4e-32 111.2 0.2 3.0 2 1 1 3 3 3 3
VOG0010 k141_1081_2 1.2e-06 27.4 0.5 0.00011 21.0 0.0 2.3 2 0 0 2 2 2 2
VOG0010 k141_17432_67 1.2e-07 30.7 0.0 1.7e-07 30.2 0.0 1.3 1 1 0 1 1 1 1
VOG0010 k141_2610_7 2.1e-06 26.6 0.0 2.9e-06 26.2 0.0 1.1 1 0 0 1 1 1 1

или

<File.txt tr -s " " | perl -pe 's/[[:space:]]-//g' | sponge File.txt

# on fish shell
tr -s " " <File.txt | perl -pe 's/[[:space:]]-//g' | sponge File.txt

Пояснение

tr -s " "                    
# Removes extra spaces
perl -pe 's/[[:space:]]-//g' 
# Replaces any ' -' with nothing
sponge File.txt              
# Reads standard input and writes it out to the specified file.

Очевидно, вы можете добиться того же результата, используя толькоperl(спасибо @ Stéphane Chazelas):

perl -pi -e 's/ +/ /g; s/[[:space:]]-//g' File.txt

аналогичноsed:

sed -i -E 's/ +/ /g; s/[[:space:]]-//g' File.txt

объяснение см. в комментарии @Stéphane Chazelas

0
28.04.2021, 23:22

Во-первых, да, sortбудет рассматривать первый -как столбец 2, k141_xxxxкак столбец 3, второй -как столбец 4 и т. д. Но это неполное упрощение; правда тонка и сложна.

Ваш вопрос не совсем ясен. Чтобы затереть второй и четвертый столбцы, какими бы они ни были, выполните

awk '{ $2=""; $4=""; print }' example.txt

Чтобы стереть любые поля, которые являются дефисом, выполните

awk '{for (i=1; i<=NF; i++) if ($i == "-") $i = ""; print}' example.txt

awkслишком много (, но иperl)тоже.

0
28.04.2021, 23:22

Теги

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