bash是否能够处理从csv文件中提取行和列?希望我不必诉诸python ..
我的5列csv文件看起来像:
Rank,Name,School,Major,Year
1,John,Harvard,Computer Science,3
2,Bill,Yale,Political Science,4
3,Mark,Stanford,Biology,1
4,Jane,Princeton,Electrical Engineering,3
5,Alex,MIT,Management Economics,2
Run Code Online (Sandbox Code Playgroud)
我只想提取第3,第4和第5列内容,忽略第一行,所以输出如下:
Harvard,Computer Science,3
Yale,Political Science,4
Stanford,Biology,1
Princeton,Electrical Engineering,3
MIT,Management Economics,2
Run Code Online (Sandbox Code Playgroud)
到目前为止,我只能得到awk打印出我的CSV文件的每一行或每一列,但不是像这种情况那样打印特定的cols/rows!bash可以这样做吗?
tha*_*guy 17
awk -F, 'NR > 1 { print $3 "," $4 "," $5 }'
Run Code Online (Sandbox Code Playgroud)
NR是当前行号,而$ 3,$ 4和$ 5是由给予-F的字符串分隔的字段
试试这个:
tail -n+2 file.csv | cut --delimiter=, -f3-5
Run Code Online (Sandbox Code Playgroud)
Bash解决方案;
使用IFS
#!/bin/bash
while IFS=',' read -r rank name school major year; do
echo -e "Rank\t: $rank\nName\t: $name\nSchool\t: $school\nMajor\t: $major\nYear\t: $year\n"
done < file.csv
IFS=$' \t\n'
Run Code Online (Sandbox Code Playgroud)
使用字符串操作和数组
#!/bin/bash
declare -a arr
while read -r line; do
arr=(${line//,/ })
printf "Rank\t: %s\nName\t: %s\nSchool\t: %s\nMajor\t: %s\nYear\t: %s\n" ${arr[@]}
done < file.csv
Run Code Online (Sandbox Code Playgroud)
使用cut
和tail
:
tail -n +2 file.txt | cut -d ',' -f 3-
Run Code Online (Sandbox Code Playgroud)