Применение одной и той же команды к разным входным файлам к разным выходным файлам - PullRequest
1 голос
/ 13 августа 2011

Я делаю

$ cut -f 1,5,6 myfile1.csv > myoutput1.csv
$ cut -f 1,5,6 myfile2.csv > myoutput2.csv
$ cut -f 1,5,6 myfile3.csv > myoutput3.csv

...

Предположим, у меня есть 400 файлов, я хочу написать только одну команду для 400 файлов, кажется, что cut не поддерживает указание выходных имен файлов? Я уверен, что здесь не хватает команды, но я не мог догадаться, как использовать здесь xargs, есть идеи?

1 Ответ

4 голосов
/ 13 августа 2011
for i in `seq 1 3`; do cut -d, -f1,5,6 "myfile${i}.csv" > "myoutput${i}.csv"; done

Чтобы обработать произвольные имена файлов, попробуйте это:

for filename in `find . -maxdepth 1 -name '*.csv' | cut -d/ -f2 | cut -d. -f1`
do
    cut -d, -f1,5,6 "${filename}.csv" > "${filename}.out.csv"
done

Еще один способ сделать скин для этого кота:

for filename in `find -name '*.csv' -exec basename "{}" \;`
do
    cut -d, -f1,5,6 $filename > ${filename/.csv}.out.csv
done
...