シェルスクリプトは入力ファイルから部分ファイル名を取得し、出力ファイルに変換します。

シェルスクリプトは入力ファイルから部分ファイル名を取得し、出力ファイルに変換します。

ソースファイル:

/path/to file/A_B_C_D_201507290915.csv

Destination_Fileは次のようになります。

/some/other/path/to file/A_B_C_D_201507290915.csv

Source_FIleを変換し、同じ名前で別の場所に保存する必要があります。

変換はcsvのすべての行を列に変換するのと同じです。使用されたコード:

#!/bin/bash
var=`echo A_B_C_D_*.csv | grep -oP '(?<=_)\d+(?=\.)'`
awk -F, '{for(i=1;i<=NF;i++){A[NR,i]=$i};if(NF>n){n=NF}}
END{for(i=1;i<=n;i++){
for(j=1;j<=NR;j++){
s=s?s","A[j,i]:A[j,i]}
print s;s=""}}' A_B_C_D_*.csv > /some/other/path/to file/A_B_C_D_$var.csv

1つのファイルではうまく機能しますが、複数のソースファイルの場合、あいまいなリダイレクトエラーが発生します。

ベストアンサー1

問題は変数にありますvar。これを維持するには、配列に割り当てます。

パスワード:

#!/bin/bash
var=`echo A_B_C_D_*.csv | grep -oP '(?<=_)\d+(?=\.)'`
arr=($var)
for i in "${arr[@]}"
do

    awk -F, '{for(i=1;i<=NF;i++){A[NR,i]=$i};if(NF>n){n=NF}}
    END{for(i=1;i<=n;i++){
    for(j=1;j<=NR;j++){
    s=s?s","A[j,i]:A[j,i]}
    print s;s=""}}' A_B_C_D_$i.csv > /some/path_to/dest/A_B_C_D_$i.csv

done

おすすめ記事