用于比较单个CSV文件中两个特定行的Shell脚本
我正在努力学习shell脚本。我有一个CSV文件,格式如下:用于比较单个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 |
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。。。但我不知道如何将其放入循环并获得输出。。在输入变量后。。它工作不正常。最好单击问题下方的“编辑”链接并提供有问题的信息。早些时候我尝试接受它。但是我的评分很低。。很抱歉但是谢谢