Замените несколько символов в текстовом файле, используя определенные значения строк и столбцов файла csv

Просто сохраните его в файл и удалите, если он не включает этот тег:

curl "http://example.com/$1" >"$1"
! grep -qF '<head>' "$1" && rm "$1"

Или, если хотите немного усложнить,

if curl "http://example.com/$1" | tee "$1" | ! grep -qF '<head>'
then
    rm "$1"
fi

Или сначала выполните все извлечение, затем просмотрите полученные файлы и удалите их,

mkdir outdir  # assuming this is not pre-existing

# iterates over all positional parameters
for path do
    curl "http://example.com/$path" >outdir/"$path"
done

find outdir -type f ! -exec grep -qF '<head>' {} \; -delete

Но это будет работать, только если вы хотите получить, например. все известные файлы по фиксированному пути.

1
10.02.2021, 12:48
1 ответ

Начиная с этого CSV(input.csv)

no,a,b
region1,-0.01703,0.08515
region2,0.02297,0.08515

вы можете преобразовать его в этот TSV(out.tsv)

region1a    -0.01703
region1b    0.08515
region2a    0.02297
region2b    0.08515

используя Миллера(https://github.com/johnkerl/miller)и работая

mlr --c2t reshape -i a,b -o item,value then put '$field=$no.$item' then cut -o -f field,value./input.csv | tail -n +2 >./out.tsv

Второй файл, который у вас есть, это(input.txt)

p1 (region1a    region1b -0.1);
p2 (region1a    region1b 5);

p1 (region2a    region2b -0.1);
p2 (region2a    region2b 5);

Затем вы можете просто запустить цикл for в скрипте bash

#!/bin/bash

set -x

cp./input.txt./output.txt
while IFS=$'\t' read -r region value; do
    sed -i -r 's/'"$region"'/'"$value"'/g'./output.txt
done <./out.tsv

output.txtбудет

p1 (-0.01703    0.08515 -0.1);
p2 (-0.01703    0.08515 5);

p1 (0.02297    0.08515 -0.1);
p2 (0.02297    0.08515 5);
2
18.03.2021, 22:31

Теги

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