名前の異なる3つの.csvファイルを含む多くのディレクトリがあります。たとえば、私のディレクトリaa bb cc ddには各ディレクトリに3つのファイルがあります。
aa: EA_sing_aa.csv EA_ska_aa.csv EA_tat_aa.csv
bb: EA_sing_bb.csv EA_ska_bb.csv EA_tat_bb.csv
cc: EA_sing_cc.csv EA_ska_cc.csv EA_tat_cc.csv
dd: EA_sing_dd.csv EA_ska_dd.csv EA_tat_dd.csv
各ファイルの名前を各ファイルの行名として新しい列に追加し、すべてのEA_sing * .csvファイルを一緒にグループ化し、すべてのEA_ska * .csvファイルを一緒にグループ化し、すべてのEA_tat *ファイルも結合したいと思います。私の出力には3つのファイルしかありません。
1) EA_sing.csv ##the first column for the rows from EA_sing_aa.csv file
will be aa and for the rows from EA_sing_bb.csv will be bb
and for the rows from EA_sing_cc.csv will be cc..... ##
2) EA_ska.csv
3) EA-tat.csv
* nixでこれを行うにはどうすればよいですか?ありがとう
ベストアンサー1
即時の答えは次のとおりです。
for dir in $(ls ); do echo " $dir - this is the directory"; for csv in $(ls $dir/*csv); do cat $csv|sed -e "s/\(.*\)/$dir, \1/g"; done; done
その後、ファイル名を指定するオプションを追加できます。
for myfile in EA_sing EA_ska EA-tat; do for csv in $(ls $dir/$myfile*)...
次に、目的のファイルにパイプします。
do cat $csv|sed -e "s/\(.*\)/$dir, \1/g" >> $(echo "$myfile_complete.csv")
その後、次のようにマージできます。
for dir in aa bb cc dd; do for file in EA_sing EA_ska EA_tat; do for myfile in $(ls $dir/$file*);do echo "parsing $myfile"; cat $myfile | sed -e "s/\(.*\)/$dir,\1/g" >> $(echo "$file\_combined.csv"); done; done; done
またはもっと重要なこと:
for dir in $(ls -d */); do for file in $(ls $dir*csv); do echo "this is my file $file"; cat $file|sed -e "s|\(.*\)|$(echo $dir|sed -e 's/\///g'), \1|g";done; done