我尝试使用Bash将.csv文件的内容存储到变量中。每当我有昏迷时,我想创建一个新变量。
.csv文件如下所示:
2015年3月17日,足球,15:00:00,15:30:00
2015年3月18日,篮球,21:00:00,22:00:00
我想将日期存储在变量中,将描述(足球......)存储到另一个变量中,将每个小时存储在不同的变量中。最后我会有4个变量。
我已经尝试过:
for line in $(< filename)
do
var1=$(cut -d , -f 1 filename)
var2=$(cut -d , -f 2 filename)
var3=$(cut -d , -f 3 filename)
var4=$(cut -d , -f 4 filename)
done
echo "$var1"
但是输出看起来像这样:
2015-03-17
2015-03-18
Soccer
Basketball
15:00:00
21:00:00
15:30:00
22:00:00
但我想要像:
2015-03-17
Soccer
15:00:00
15:30:00
2015-03-18
Basketball
21:00:00
22:00:00
这样我就可以将每列的输出保存在变量中。
我也试过用awk
for line in 2
do
awk -F "," '{print $1}' filename
awk -F "," '{print $2}' filename
awk -F "," '{print $3}' filename
awk -F "," '{print $4}' filename
done
但是我无法只显示第一行,然后显示下一行等,并将所有内容存储在不同的变量中。
感谢您的帮助。
答案 0 :(得分:4)
您可以按照以下方式执行此操作:
while IFS=, read -r date activity starttime endtime
do
echo $activity
done < filename
如果将内部字段分隔符变量IFS
设置为逗号,bash会将每个逗号分隔的表达式解释为新变量。然后,您可以在读取文件
答案 1 :(得分:0)
在awk中,当然你默认获得变量。你可以用它们做你想做的事情,然后如果你想每行打印一个,只需将OFS设置为换行符:
$ awk -F, -v OFS="\n" '{ print $1, $2, $3, $4 }' data.txt
2015-03-17
Soccer
15:00:00
15:30:00
2015-03-18
Basketball
21:00:00
22:00:00
如果您真正想做的就是将逗号转换为换行符,那么您可以使用这个更加惯用的awk(甚至只是tr ',' "\n" < data.txt
)
$ awk -F, -v OFS="\n" '{$1=$1}1' data.txt
2015-03-17
Soccer
15:00:00
15:30:00
2015-03-18
Basketball
21:00:00
22:00:00
-F,
将输入字段分隔符设置为逗号
-v OFS="\n"
将输出字段分隔符设置为换行符
{$1=$1}
重构线以使用输出字段分隔符
1
打印