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。