테이블에 특정 열 추가

테이블에 특정 열 추가

다음과 같은 명명 스타일을 가진 여러 테이블이 있습니다.

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

불행하게도 첫 번째 열에 테이블을 추가하는 동안 중복을 피하기 위해 첫 번째 열 3개를 제거하고 싶습니다. 나는 명령줄에서 그렇게 하는 방법을 알고 있습니다.

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

그러나 나는 그것을 루프에서 구현하지 못했습니다 for. 어떤 힌트라도 환영합니다!

답변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

관련 정보