bash - 将列数据转换为行的 Bash 脚本
问题描述
我在逗号单独的文件中有数据。这是输入文件的结构。
代码,day_1,day_2,day_3
- 1235, 0, 21, 6
- 1236、9、3、4
- 1237, 1, 7, 3
我想对其进行转换,并将列数据显示为行条目
代码,日期,计数
- 1235,第 1 天,0
- 1235, day_2, 21
- 1235,第 3 天,第 6 天
- 1236,第 1 天,第 9 天
- 1236,第 2 天,第 3 天
- 1236, day_3, 4
- 1237, day_1, 1
- 1237,第 2 天,第 7 天
- 1237, day_3, 3
这是我的代码和输出。
代码
#!/bin/bash
file='test_file.in'
IFS=$','
while read -r code day_1 day_2 day_3
do
#echo "$code, $branch, $description"
count=1
while [ $count -le 3 ]
do
day_var=""'$day_'"${count}"
#echo $day_var
echo "$code, day_${count}, $day_var"
count=$[$count+1]
done
done < $file
输出:
120006, day_1, $day_1 120006, day_2, $day_2 120006, day_3, $day_3 120007, day_1, $day_1 120007, day_2, $day_2 120007, day_3, $day_3 140197, day_1, $day_1 140197, day_72, $day第 3 天,第 3 美元
请为我建议一个 bash 脚本解决方案。
解决方案
这是您的代码的更正版本:
#!/bin/bash
file='test_file.in'
while IFS=, read -r code day_1 day_2 day_3
do
#echo "$code, $branch, $description"
count=1
while [ $count -le 3 ]
do
day_var=day_$count
echo "$code, $day_var, ${!day_var}"
count=$((count+1))
done
done < "$file"
把它和你的比较一下。
但我的方法是:
#!/bin/bash
while IFS=, read -r code day1 day2 day3; do
printf '%s, day_1,%s\n%s, day_2,%s\n%s, day_3,%s\n' \
"$code" "$day1" "$code" "$day2" "$code" "$day3"
done < file
推荐阅读
- java - 读取数据时出现问题,类 org.dom4j.Document,ContentType:application/atom+xml;charset=utf-8;type=feed。在
- python - 从 Python 中的变量中删除字符
- c# - 如何在不使用 web.config 的情况下从后面的代码中检测错误以创建自定义错误页面?
- android - 运行时权限和半透明覆盖
- redux - react/redux/sagas - 如何根据现有的商店数据链接操作?
- excel - Excel:在有两列(项目,数量)的表中,找出数量最多的项目的名称
- c# - 双类型属性(类)和双类型字段(SQL查询)中浮点数表示的差异
- shader - 从字符串创建 DX11 着色器
- python - 循环结束以单击列表中的元素
- java - 当系统从休眠状态恢复时自动运行应用程序