我想在 CSV 文件中剪切数组列。例如,如果您看到以下 CSV 文件
输入.csv
1,2,"{1,2,3}",1
3,4,"{3,9,1}",2
8,9,"{10,12,30}",3
我想要的输出为
输出.csv
1,2,3
3,9,1
10,12,30
我尝试使用cut -d , -f 3 input.csv
andcut -d { -f 3 input.csv
但两者都不起作用。感谢任何帮助。提前致谢。
答案1
您awk
可以使用 定义多个字段分隔符-F'[]'
,因此您可以将两个大括号定义为分隔符并打印第二个字段:
awk -F'[{}]' '{print $2}' input.csv
1,2,3
3,9,1
10,12,30
答案2
$ cat input.csv
1,2,"{1,2,3}",1
3,4,"{3,9,1}",2
8,9,"{10,12,30}",3
$ sed -E 's/^([^,],){2}"\{([^}]+).*/\2/' input.csv
1,2,3
3,9,1
10,12,30
- 某些
sed
版本用于-r
代替-E
扩展正则表达式 ^([^,],){2}
前两列"\{
"{
第三列匹配,未捕获([^}]+)
捕获非}
字符.*
其余线- 将整行替换为所需的字符串
与grep
和pcre
$ grep -oP '^([^,],){2}"\{\K[^}]+' input.csv
1,2,3
3,9,1
10,12,30