複数のCSVファイルがあります(すべての行と列の数が同じです)。各ファイルの形式は次のとおりです。awk:複数のcsvファイルの列を1つのcsvファイルに追加する
1 100.23 1 102.03 1 87.65
2 300.56 2 131.43 2 291.32
. . . . . .
. . . . . .
200 213.21 200 121.81 200 500.21
2列目、4列目、6列目を抽出し、1つのCSVファイルに追加する必要があります。 私は、すべてのCSVファイルを経由する私のシェルスクリプトでループを持つ列を抽出し、単一のファイルにこれらの列を追加:
1 100.23 102.03 87.65 219.42 451.45 903.1 ... 542.12 321.56 209.2
2 300.56 131.43 291.32 89.57 897.21 234.52 125.21 902.25 254.12
. . . . . . . . . .
. . . . . . . . . .
200 213.23 121.81 500.21 231.56 5023.1 451.09 ... 121.09 234.45 709.1
:これは、この出力を生成し実行
#output header column
awk -F"," 'BEGIN {OFS=","}{ print $1; }' "$input" > $output
for f in "$1"*.csv;
do
if [[ -f "$f" ]] #removes symlinks (only executes on files with .csv extension)
then
fname=$(basename $f)
arr+=("$fname") #array to store filenames
paste -d',' $output <(awk -F',' '{ print $2","$4","$6; }' "$f") > temp.csv
mv temp.csv "$output"
fi
done
私の所望の出力は次のようになります1つのCSVファイルです:つまり
1.csv 1.csv 1.csv 2.csv 2.csv 2.csv ... 700.csv 700.csv 700.csv
1 100.23 102.03 87.65 219.42 451.45 903.1 542.12 321.56 209.2
2 300.56 131.43 291.32 89.57 897.21 234.52 125.21 902.25 254.12
. . . . . . . . . .
. . . . . . . . . .
200 213.23 121.81 500.21 231.56 5023.1 451.09 ... 121.09 234.45 709.1
、私はワットを識別するために、ファイル名を含むヘッダ行を必要としますファイルが列から抽出されたファイルです。私はこれを行う方法の周りに私の頭を包んでいるように見えることはできません。
これを達成する最も簡単な方法は何ですか(できればawkを使用します)。 ファイル名を配列に格納し、ヘッダ行を挿入して配列を出力することを考えていましたが、構文を理解できません。
HTH awkのファイル名。 – Mischa
@ミシャ私が正しく理解していれば、私が書いたループはすでにこれを行い、単一のcsvファイルを作成すると信じています。その後、ファイル名を格納するヘッダー行を挿入する必要がある問題が発生します。 – Jason