Bash 将文本文件格式化为列
Bash formatting text file into columns
我有一个包含数据的文本文件,它的设置类似于 table,但用逗号分隔,例如:
姓名、年龄、喜欢的颜色、地址
鲍勃,18 岁,蓝色,史密斯街 1 号
朱莉,17 岁,黄色,约翰街 4 号
首先,我尝试使用 for 循环,并将每个 'column' 及其所有值放入一个单独的数组中。
eg/ 'nameArray' 将包含鲍勃、朱莉。
这是我实际脚本中的代码,有 12 列,因此为什么 c 不应大于 12。
declare -A Array
for((c = 1; c <= 12; c++))
{
for((i = 1; i <= $total_lines; i++))
{
record=$(cat $FILE | awk -F "," 'NR=='$i'{print $'$c';exit}'| tr -d ,)
Array[$c,$i]=$record
}
}
然后我从这里使用 'printf' 函数来格式化每个数组并将它们打印为列。这个问题是我有 3 个以上的数组,在我的实际代码中它们都在同一 'printf' 行中。我不喜欢,我知道这样做很愚蠢。
for ((i = 1; i <= $total_lines; i++))
{
printf "%0s %-10s %-10s...etc \n" "${Array[1,$i]}" "${Array[2,$i]}" "${Array[3,$i]}" ...etc
}
然而,这确实给了我想要的输出,见下图:
我想找出不需要大量打印语句的另一种方法。也是我第一次调用 for 循环时出现 'awk'.
错误
如有任何建议,我将不胜感激,我查看了多个主题和帖子,试图找到一个 suitable 解决方案,但没有找到有用的东西。
像
一样尝试column
命令
column -t -s','
这是我可以快速得到的。有关详细信息,请参阅手册页。
我有一个包含数据的文本文件,它的设置类似于 table,但用逗号分隔,例如:
姓名、年龄、喜欢的颜色、地址
鲍勃,18 岁,蓝色,史密斯街 1 号
朱莉,17 岁,黄色,约翰街 4 号
首先,我尝试使用 for 循环,并将每个 'column' 及其所有值放入一个单独的数组中。
eg/ 'nameArray' 将包含鲍勃、朱莉。
这是我实际脚本中的代码,有 12 列,因此为什么 c 不应大于 12。
declare -A Array
for((c = 1; c <= 12; c++))
{
for((i = 1; i <= $total_lines; i++))
{
record=$(cat $FILE | awk -F "," 'NR=='$i'{print $'$c';exit}'| tr -d ,)
Array[$c,$i]=$record
}
}
然后我从这里使用 'printf' 函数来格式化每个数组并将它们打印为列。这个问题是我有 3 个以上的数组,在我的实际代码中它们都在同一 'printf' 行中。我不喜欢,我知道这样做很愚蠢。
for ((i = 1; i <= $total_lines; i++))
{
printf "%0s %-10s %-10s...etc \n" "${Array[1,$i]}" "${Array[2,$i]}" "${Array[3,$i]}" ...etc
}
然而,这确实给了我想要的输出,见下图:
我想找出不需要大量打印语句的另一种方法。也是我第一次调用 for 循环时出现 'awk'.
错误如有任何建议,我将不胜感激,我查看了多个主题和帖子,试图找到一个 suitable 解决方案,但没有找到有用的东西。
像
一样尝试column
命令
column -t -s','
这是我可以快速得到的。有关详细信息,请参阅手册页。