我是shell脚本的新手,并建议通过电子邮件发送以下数据
09,01,14-Jan-2016 02:39:27,14-Jan-2016 02:40:25,14-Jan-2016 04:54:34,14-Jan-2016 07:54:54,,,01/16/2016
10,01,15-Jan-2016 02:38:45,15-Jan-2016 02:40:28,15-Jan-2016 03:50:50,15-Jan-2016 06:21:09,,,01/17/2016
11,01,,,,,,,01/19/2016
12,01,,,,,,,01/21/2016
13,01,,,,,,,01/23/2016
我已确定将每个值存储在tb.csv文件中,作为以下单独的变量
awk -F, 'NR==18 {print $1,$2,$3,$4,$5,$6,$7,$8,$9}' tb.csv | read ksk1 ksk2 ksk3 ksk4 ksk5 ksk6 ksk7 ksk8 ksk9
它正在读取第18行的每个值并将其存储在变量ksk(1到9)
中"14-Jan-2016 02:40:25"
,但14-Jan-2016
采用不同的变量,
02:40:25
和其他人一样,似乎空间是问题 - 期待awk
应忽略空格并考虑一个变量中的值11,01,,,,,,,01/19/2016
,中间有空白的awk
忽略空白并将值01/19/2016
指定为第3 ksk
个变量 -
期望空白值被固定为单独的变量和
第9个变量被赋值01/19/2016
答案 0 :(得分:0)
您可以使用逗号输出字段,逗号作为分隔符,并通过阅读设置IFS=","
:
awk -F, -v OFS="," '{..yourcodes}'|IFS="," read...
答案 1 :(得分:0)
awk部分正在做你想要的一切,之后的shell就是你没有用awk输出做你想做的事。
如果你正在使用bash:
$ IFS=, read -ra ksk < <(awk 'NR==2' file)
$ for (( i=0; i<${#ksk[@]}; i++ )); do printf "ksk[%d]:\"%s\"\n" "$i" "${ksk[i]}"; done
ksk[0]:"10"
ksk[1]:"01"
ksk[2]:"15-Jan-2016 02:38:45"
ksk[3]:"15-Jan-2016 02:40:28"
ksk[4]:"15-Jan-2016 03:50:50"
ksk[5]:"15-Jan-2016 06:21:09"
ksk[6]:""
ksk[7]:""
ksk[8]:"01/17/2016"
$ IFS=, read -ra ksk < <(awk 'NR==3' file)
$ for (( i=0; i<${#ksk[@]}; i++ )); do printf "ksk[%d]:\"%s\"\n" "$i" "${ksk[i]}"; done
ksk[0]:"11"
ksk[1]:"01"
ksk[2]:""
ksk[3]:""
ksk[4]:""
ksk[5]:""
ksk[6]:""
ksk[7]:""
ksk[8]:"01/19/2016"
还可以google bash mapfile
和readarray
查看它们是否对您有用。