Saya telah mendapatkan file .csv, dengan beberapa angka, saya ingin mendapatkan file baru dengan jumlah baris dan satu kolom yang sama, dengan jumlah angka dari baris yang sesuai dalam file .csv yang asli.
Masukkan contoh (perhatikan spasi putih, saya harap ini tidak menjadi masalah)
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
Output yang diharapkan
2
4
5
6
7
Kode saya (tidak menghasilkan output apa pun):
file_out="output.txt"
file_in="input.txt"
cmd3="sum_file=\$(awk -F, '
{
sum = 0;
for (i=1; i<=NF; i++) {
sum += \$i;
}
print sum;
}
' ${file_in})"
echo $cmd3
eval $cmd3
eval "echo ${sum_file} > ${file_out}"
Anda dapat mengusulkan juga alat yang berbeda dari awk, tapi saya akan senang mengetahui mengapa kode saya tidak berfungsi, mungkin karena spasi putih (saya tidak berpikir begitu).
eval
memasukkannya? Tampaknya sangat berbelit-belit. Apakah ada persyaratan yang tidak Anda beritahukan kepada kami?\${sum_file}
. Saya menggunakan eval untuk keperluan debug, karena mudah untuk menggemakan baris. Tetapi dengan melakukan itu, saya memperkenalkan bug baru :( Setidaknya sekarang sudah dipecahkanJawaban:
Anda tidak memerlukan nilai sementara. Cukup jalankan
awk
dan redirect output ke file.sumber
sum += \$i;
menyebabkan kesalahan sintaks kecuali bagian dari miscmd3="..."
.awk
:perl
:sumber