awkループ中に列ヘッダーを追加するのに問題があります。現在、各csvファイルの各行の平均を計算するための次のコードがあります。
for i in *.csv; do
awk -F"," 'NR==1 { next }
{ T=0
for(N=1; N<=NF; N++) T+=$N;
T/=NF
print T }' $i > Mean$i
done
したがって、MeanName1.csv、MeanName2.csv...を取得するファイルには、次のものが含まれます。
2.5 3.5 ...
4.2 3.4
1.2 3.9
1.2 3.7
次の内容を含む「平均」ファイルが必要です。
Name1 Name2 ...
2.5 3.5
4.2 3.4
1.2 3.9
1.2 3.7
ループでprint FILENAMEを使用できませんでした。
おすすめメニューとは何ですか?ありがとう
答え1
Join Output Fileを使用するのが最も簡単ですが、paste
ファイル名をヘッダーとして追加する方法がわからないようです。ただし、ループ内の中間出力ファイルに対してこれを手動で実行できるため、次のようになります。
for i in *.csv; do
out="Mean$i"
echo "${i%.csv}" > "$out"
awk -F"," 'NR==1 { next }
{ T=0
for(N=1; N<=NF; N++) T+=$N;
T/=NF
print T }' "$i" >> "$out"
done
paste Mean*.csv > All.csv
${i%.csv}
$i
サフィックス値のみを削除するため、sum.csv
には次の出力が与えられます。foo.csv
bar.csv
bar foo
4.33333 2.5
3.8 3.5
各入力行の最初の行()もスキップされていますNR==1 { next }
。便利なヘッダーが含まれている場合は、上記で追加したヘッダーを変更してからNR==1 { print; next }
削除して使用することもできます。echo