Linux 将目录中所有文件的第5列除以3?

Linux 将目录中所有文件的第5列除以3?,linux,bash,csv,awk,find,Linux,Bash,Csv,Awk,Find,如何循环遍历目录中的所有文件并将第5列的值除以3?我希望对文件本身进行更改,并且应跳过第一行,因为它是字段头。字段之间用逗号分隔 这应该可以做到(如果所有文件都在一个目录下,如果没有,则使用find): 此脚本将执行以下操作: #!/bin/bash script=$(basename $0) find . -maxdepth 1 -type f | while IFS= read -r file do if [[ $(basename "$file") != "$script"

如何循环遍历目录中的所有文件并将第5列的值除以3?我希望对文件本身进行更改,并且应跳过第一行,因为它是字段头。字段之间用逗号分隔

这应该可以做到(如果所有文件都在一个目录下,如果没有,则使用find):


此脚本将执行以下操作:

#!/bin/bash

script=$(basename $0)

find . -maxdepth 1 -type f | while IFS= read -r file
do
    if [[ $(basename "$file") !=  "$script" ]]; then
        awk 'NR>1{$5=$5/3}1' FS=, OFS=, "$file" > tmp
        mv tmp "$file"
    fi
done

perl对于就地编辑非常方便:

for f in *; do 
    perl -F, -i -lane 'BEGIN {$,=","} $F[4]/=3 if $.>1; print @F' "$f"
done

如何修改此项以截断十进制值?将
$F[4]/=3
更改为
$F[4]=int($F[4]/3)
for f in *; do 
    perl -F, -i -lane 'BEGIN {$,=","} $F[4]/=3 if $.>1; print @F' "$f"
done