用于比较单个CSV文件中两个特定行的Shell脚本

用于比较单个CSV文件中两个特定行的Shell脚本,shell,Shell,我正在努力学习shell脚本。我有一个CSV文件,格式如下: Time, value1, value2, value3 12-17 17:47:55.380,1,2,9 12-17 17:48:55.380,8,4,9 12-17 17:49:55.380,1,2,9 12-17 17:50:55.380,8,4,9 我正在寻找csv输出,如以下内容: 0,0,0,0 1,7,2,0 1,-7,-2,0 1,7,2,0 到目前为止,我已经编写了代码: First_value=ps -ef |

我正在努力学习shell脚本。我有一个CSV文件,格式如下:

Time, value1, value2, value3
12-17 17:47:55.380,1,2,9
12-17 17:48:55.380,8,4,9
12-17 17:49:55.380,1,2,9
12-17 17:50:55.380,8,4,9
我正在寻找csv输出,如以下内容:

0,0,0,0
1,7,2,0
1,-7,-2,0
1,7,2,0
到目前为止,我已经编写了代码:

First_value=ps -ef |awk "NR==1{print ;exit}" try.csv Second_value=ps -ef |awk "NR==2{print ;exit}" try.csv  echo diff = $Second_value - $First_value
但我得到的错误如下:

read.sh:14:read.sh:12-17:未找到

以下是我的疑问:

我无法将其放入循环并获得输出。我想 知道如何将结果写回同一个csv文件,但至少 特定的行和列。 下面的脚本csvdiff.sh将比较您选择的两行,并用原始分隔字符输出这些行

#! /bin/bash

# input:   $1 - CVS file
#          $2 - line number of line to subtract from
#          $3 - line number of line to subtract

# Save separators
head -n1 $1 | sed 's/[0-9]\+/\n/g' | head -n-1 | tail -n+2 > .seps

# check for reversed compare
if [ $3 -lt $2 ]
then
    first=$3
    second=$2
    reversed=1
else
    first=$2
    second=$3
    reversed=0
fi

# get requested lines ($2 & $3) from the CVS file as supplied in $1
awk -v first=$2 -v second=$3 -F'[,: ]' 'BEGIN { OFS="\n" } 
   NR==first{ split($0,v) } 
   NR==second{ 
       split($0,w) 
       res=0 
       for (i in w) {
           $i = v[i]-w[i]
       } 
       print
    }' $1 > .vals

# handle reversed compare
if [ $reversed -eq 1 ]
then
    awk '{print $1 * -1}' .vals > .tmp
    mv .tmp .vals
fi

# paste the differences with the original seperation characters
paste -d'\0' .vals .seps | paste -sd'\0'

# remove used files
rm .vals .seps
用法示例:

$ cat file
2,2,3,4,5:10
1,2,3,4,5:12
$ chmod +x csvdiff.sh
$ bash csvdiff.sh file 1 2
1,0,0,0,0:-2
$ bash csvdiff.sh file 2 1
-1,0,0,0,0:2

请注意,此脚本将比较由多个分隔符(如冒号和逗号)分隔的字段。但是,它不会考虑时间等语义。这意味着日期不会从整体上减去,而是从组件上减去。

确切的行数之间的差异?预期输出和您尝试过的输出是什么?请分享您迄今为止尝试过的代码?我正在寻找CSv输出,例如:1,7,2,0/1,-7,-2,0/1,7,2,0。/在此指定为csv文件中的下一行。到目前为止,我已经编写了代码:I=1 First_value=ps-ef | awk NR=$I{print;exit}try.csv echo$First_value b=I+1 Second_value=ps-ef | awk NR=$b{print;exit}try.csv echo$Second_value diff=$Second_value-$First_value echo diff exit。。。但我不知道如何将其放入循环并获得输出。。在输入变量后。。它工作不正常。最好单击问题下方的“编辑”链接并提供有问题的信息。早些时候我尝试接受它。但是我的评分很低。。很抱歉但是谢谢