2

Вот ситуация:

Мой файл A.csv необходимо объединить отдельно со всеми остальными * .csv в папке, и каждый из выходных файлов должен иметь то же имя, что и конкретный * .csv.

Как я могу сделать это в терминале? Я должен сделать это 50 раз, и другие CSV не имеют соглашения о порядке именования, так что печатать вручную - это боль.

Данные чувствительны, поэтому я не могу дурачиться с проверкой, работает ли cat A.csv * csv> *. Csv. (Я предполагаю, что не будет)

1 ответ1

3

Используйте цикл for в bash . Вы можете сначала сделать себе безвредный тест:

#!/bin/bash
for f in *.csv; do
    if [ "$f" != 'A.csv' ]; then
        echo cat A.csv "$f" \> "$f.new"
    fi
done

Это позволяет вам увидеть, что будет выполнено, но не выполнит его на самом деле.

Обратите внимание, что я назвал выходной файл $f.new . Вы не можете гарантировать, что cat будет выполнена до того, как оболочка начнет перезаписывать файл. Поэтому я рекомендую вам сделать это, или даже лучше записать файлы в другой каталог:

mkdir combined
for f in *.csv; do
    if [ "$f" != 'A.csv' ]; then
        echo cat A.csv $f \> "combined/$f"
    fi
done

И, конечно, как только вы будете счастливы, удалите эхо (и экранированный символ > ):

cat A.csv "$f" > "combined/$f"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .