我有一个包含以下数据类型的文件:
4-11-11 12:59:01,C,26,668
4-11-11 12:59:31,C,26,668
4-11-11 13:00:01,C,26,668
4-11-11 13:00:31,C,26,668
4-11-11 13:01:01,C,26,668
4-11-11 13:01:31,C,26,668
我想要以下输出:
12:59:01 26.668
12:59:31 26.668
13:00:01 26.668
13:00:31 26.668
13:01:01 26.668
13:01:31 26.668
这在使用以下行的termal中工作正常,但在bash脚本中没有,它只是给我一个空文件。添加awk部分后问题就出现了。
cut -d ' ' -f2 $file | cut -d ',' -f-1,3- | awk -f tmp.csv -F"," '{print $1 " " $2 "." $3}' | sed 's/"//' > tmp.csv
cp tmp.csv > $file
有人可以解释为什么这在脚本中不起作用吗?
谢谢!
答案 0 :(得分:3)
我想你的脚本中的环境应该受到责备,但整个事情只能使用read
完成:
while IFS=' ,' read a b c d e
do
echo "$b $d.$e"
done < inputfile
也许这可以在不同的层面上解决问题; - )
答案 1 :(得分:2)
使用此awk
可以更轻松:
$ awk -F'[ ,]' '{print $2, $4"."$5}' file
12:59:01 26.668
12:59:31 26.668
13:00:01 26.668
13:00:31 26.668
13:01:01 26.668
13:01:31 26.668
-F'[ ,]'
设置两个可能的分隔符:空格和逗号。print $2, $4"."$5
根据这些分隔符打印第2,第4和第5个字段。关于你的脚本无法正常工作的原因,只是因为你不必要地添加了-f tmp.csv
。
$ cut -d ' ' -f2 a | cut -d ',' -f-1,3- | awk -F"," '{print $1 " " $2 "." $3}' | sed 's/"//'
12:59:01 26.668
12:59:31 26.668
13:00:01 26.668
13:00:31 26.668
13:01:01 26.668
13:01:31 26.668
此外,您使用-f tmp.csv
,然后使用> tmp.csv
这是没有意义的。请注意,文件不能同时用作stdin和stdout。
答案 2 :(得分:2)
您没有复制临时文件;你只是删除你的原始文件。我不确定你为什么没有收到错误(你应该这样,因为cp
需要两个参数)。
而不是
cp tmp.csh > $file
使用
cp tmp.csv "$file"