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

时间:2013-07-09 18:57:52

标签: linux bash csv awk find

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

3 个答案:

答案 0 :(得分:1)

这个脚本可以解决问题:

#!/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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

这应该这样做(如果你有一个目录下的所有文件,如果没有,那么使用find):

for f in /path/to/dir/* ; do 
    awk 'BEGIN{FS=OFS=","}NR>1{$5=$5/3}1' "$f" > "$f".tmp && mv "$f".tmp "$f"
done