首页 > 解决方案 > 将列数据转换为行的 Bash 脚本

问题描述

我在逗号单独的文件中有数据。这是输入文件的结构。

代码,day_1,day_2,day_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 脚本解决方案。

标签: 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

推荐阅读