cut -f2 -d"," - 由于第一列封装在双引号内,因此无法正确获取第二列。
"Foo News, Videos (Android)","Foo News, Videos - Android","Foo News, Videos (Android)"
Bar News (iOS),"Bar News, Movie - iOS",Bar News & Movie (iOS)
在 bash 5.2 中,可以这样做:此版本的 bash 附带了一个尊重双引号字段的“分隔符分隔值”可加载模块。
enable dsv
while IFS= read -r line; do
dsv -a fields "$line"
declare -p fields
printf '%s\n' "${fields[1]}"
done < file.csv
declare -a fields=([0]="Foo News, Videos (Android)" [1]="Foo News, Videos - Android" [2]="Foo News, Videos (Android)")
Foo News, Videos - Android
declare -a fields=([0]="Bar News (iOS)" [1]="Bar News, Movie - iOS" [2]="Bar News & Movie (iOS)")
Bar News, Movie - iOS
我的 ~/.bashrc 中有这个可以让这变得简单:
# for loadable builtins
bash_root=${BASH%/bin/bash}
[[ -d "$bash_root/lib/bash" ]] && BASH_LOADABLES_PATH="$bash_root/lib/bash"
unset bash_root