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