我有一个具有以下类型数据的文件:
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这在下面一行的术语中工作得很好,但在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有人能解释一下为什么这在剧本里行不通吗?
谢谢!
发布于 2013-11-14 15:28:06
有了这个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。
发布于 2013-11-14 15:32:19
我想应该归咎于脚本中的环境,但是所有的事情都可以用read来完成
while IFS=' ,' read a b c d e
do
echo "$b $d.$e"
done < inputfile也许这在不同的层面上解决了这个问题;-)
发布于 2013-11-14 15:37:35
您不是在复制临时文件,而是删除原始文件。我不知道为什么您没有得到一个错误(应该是这样,因为cp需要两个参数)。
而不是
cp tmp.csh > $file使用
cp tmp.csv "$file"https://stackoverflow.com/questions/19981592
复制相似问题