Добавьте определенный столбец к таблице

У меня есть несколько таблиц со следующим стилем именования:

INSTITUTE_MODEL_SCENARIO_RIVER.txt

как примеры:

wbm_gfdl_rcp8p5_mississippi.txt
wbm_hadgem_rcp8p5_mississippi.txt
wbm_miroc_rcp8p5_mississippi.txt
matsiro_gfdl_rcp4p5_mississippi.txt
matsiro_ipsl_rcp8p5_mississippi.txt

Я хочу создать таблицу выходных данных, группирующую тех имеющих INSTITUTE и SCENARIO имя в имени файла. Для этого у меня есть следующий цикл:

for institute in wbm matsiro
do
  for scenario in rcp4p5 rcp8p5
  do
    paste "$institute"_*_"$scenario"* > "$hyd_model"_"$scenario".txt
  done
done

К сожалению, при добавлении таблиц к первой я хочу избавиться от трех первых столбцов (для предотвращения дублирования). Я знаю, чтобы сделать это в командной строке:

paste wbm_gfdl_rcp8p5_mississippi.txt <(cut -f4 wbm_hadgem_rcp8p5_mississippi.txt) <(cut -f4 wbm_miroc_rcp8p5_mississippi.txt) > output.txt

Но я не успешно выполнялся для реализации этого в for цикл. Любые подсказки приветствуются!

1
задан 7 October 2015 в 21:08

1 ответ

Интересный вопрос. Я использовал бы множество, чтобы захватить соответствующие файлы и использовать рекурсивную функцию, чтобы приклеить каждый дополнительный файл:

paste_files() {
    if [[ "$#" -eq 0 ]]; then
        cat -
    else
        paste - <(cut -f4 "$1") | paste_files "${@:1}"
    fi
}

for institute in wbm matsiro; do
    for scenario in rcp4p5 rcp8p5; do
        files=( "$institute"_*_"$scenario"* )
        cat "${files[0]}" | paste_files "${files[@]:1}" > "$hyd_model"_"$scenario".txt
    done
done
1
ответ дан 7 December 2019 в 16:08

Другие вопросы по тегам:

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