Shell 如何在终端中为CSV文件中的各个列着色?

Shell 如何在终端中为CSV文件中的各个列着色?,shell,csv,sh,Shell,Csv,Sh,给定文件.csv: 0.99,Apple,Fruit 22.33,Banjo,Instrument 1.95,Chocolate,Snack 和.bashrc/.bash\u配置文件(非GNU): 我可以将第一列涂成红色,如下所示: for a in $(cut -f 1 -d, - < file.csv); do printf ${CRED}$a${CEND}'\n'; done 我尝试使用颜色来分隔列;不是通过制表符或空格。您需要使用IFS CEND='\e[0;0m' CRED=

给定
文件.csv

0.99,Apple,Fruit
22.33,Banjo,Instrument
1.95,Chocolate,Snack
.bashrc
/
.bash\u配置文件
(非GNU):

我可以将第一列涂成红色,如下所示:

for a in $(cut -f 1 -d, - < file.csv); do printf ${CRED}$a${CEND}'\n'; done
我尝试使用颜色来分隔列;不是通过制表符或空格。

您需要使用IFS

CEND='\e[0;0m'
CRED='\e[0;31m'
CGREEN='\e[0;32m'


while IFS=, read -r col1 col2 col3
do
    printf "${CRED}$col1${CGREEN}$col2${CEND}$col3\n"
done < path_to_csv_file
CEND='\e[0;0m'
CRED='\e[0;31m'
CGREEN='\e[0;32m'
当IFS=,读-r col1 col2 col3
做
printf“${CRED}$col1${CGREEN}$col2${CEND}$col3\n”
完成
编辑
CEND='\e[0;0m'
CRED='\e[0;31m'
CGREEN='\e[0;32m'
CSV_FILE='CSV'
阅读max1 max2您需要使用IFS

CEND='\e[0;0m'
CRED='\e[0;31m'
CGREEN='\e[0;32m'


while IFS=, read -r col1 col2 col3
do
    printf "${CRED}$col1${CGREEN}$col2${CEND}$col3\n"
done < path_to_csv_file
CEND='\e[0;0m'
CRED='\e[0;31m'
CGREEN='\e[0;32m'
当IFS=,读-r col1 col2 col3
做
printf“${CRED}$col1${CGREEN}$col2${CEND}$col3\n”
完成
编辑
CEND='\e[0;0m'
CRED='\e[0;31m'
CGREEN='\e[0;32m'
CSV_FILE='CSV'

阅读Max Max 2P>你会考虑使用<代码> Python < /C>吗?如果是,那么

$ cat file.csv
some,name,thing
0.99,Apple,Fruit
22.33,Banjo,Instrument
1.95,Chocolate,Snack
以及
colorize_csv.py
文件

# colorize_csv.py
# Usage: `python colorize_csv.py file.csv`

from csv import DictReader
import sys


green = "\033[32m"
red = "\033[31m"
yellow = "\033[33m"
reset = "\033[00m"
with open(sys.argv[1]) as file:
    reader = DictReader(file)

    for row in reader:
        line = "{}{:<10s} {}{:<10s} {}{:<10s}{}".format(red, row['some'], green, row['name'], yellow, row['thing'], reset)
        print(line)
#colorize_csv.py
#用法:`python colorize_csv.py file.csv`
从csv导入DictReader
导入系统
绿色=“\033[32m”
红色=“\033[31米”
黄色=“\033[33米”
reset=“\033[00m”
打开(sys.argv[1])作为文件:
读卡器=听写器(文件)
对于读取器中的行:

行=“{}{{:p>”你会考虑使用<代码> Python < /代码>吗?如果是,那么

$ cat file.csv
some,name,thing
0.99,Apple,Fruit
22.33,Banjo,Instrument
1.95,Chocolate,Snack
以及
colorize_csv.py
文件

# colorize_csv.py
# Usage: `python colorize_csv.py file.csv`

from csv import DictReader
import sys


green = "\033[32m"
red = "\033[31m"
yellow = "\033[33m"
reset = "\033[00m"
with open(sys.argv[1]) as file:
    reader = DictReader(file)

    for row in reader:
        line = "{}{:<10s} {}{:<10s} {}{:<10s}{}".format(red, row['some'], green, row['name'], yellow, row['thing'], reset)
        print(line)
#colorize_csv.py
#用法:`python colorize_csv.py file.csv`
从csv导入DictReader
导入系统
绿色=“\033[32m”
红色=“\033[31米”
黄色=“\033[33米”
reset=“\033[00m”
打开(sys.argv[1])作为文件:
读卡器=听写器(文件)
对于读取器中的行:

line=“{}{:太好了!现在您如何通过扩展短文本的长度来对齐这些列,以便它们与我的示例中最长的文本匹配?我用这些更改编辑了上一篇文章。要检索列的最大长度,我们使用awk。最后,它只剩下填充空格。更好的
printf“${CRED}%s${space1}${CGREEN}%s${space2}${CEND}%s\n“${col1}”${col2}”${col3}”
防止包含
%s
的字段出现问题。使用一个
读取长度1 length2读取两个长度计算col1和col2的最大长度时,可以使用
printf“${CRED}%-*s${CGREEN}-*s${CEND}%s\n”${max1 col1}{col2}{
Great!现在,您如何通过扩展短文本的长度来对齐这些列,以便它们与我的示例中的最长文本匹配?我用这些更改编辑了上一篇文章。要检索列的最大长度,我们使用awk。最后,它只剩下填充空格。更好的
printf“${CRED}%s${space1}${CGREEN}%s${space2}${CEND}%s\n“${col1}”${col2}”${col3}”
防止包含
%s
的字段出现问题。使用一个
读取长度1 length2读取两个长度计算col1和col2的最大长度时,可以使用
printf“${CRED}%-*s${CGREEN}-*s${CEND}%s\n”${max1 col1}{col2}{
我并不总是偏离Unix理念,但当我这样做时,我更喜欢golang。我并不总是偏离Unix理念,但当我这样做时,我更喜欢golang。