我在 CSV 文件中有一个数组,如下所示
input.csv
"{1,2,3,4}"
"{1,2,3,4,5,6,7,8,9}"
"{34,6,7,89}"
我想将此 CSV 文件的第一个和最后一个元素作为另一个 CSV 文件
output.csv
1,4
1,9
34,89
我尝试过
cut -d , -f1 -- complement input.csv > output.csv
我知道这适用于普通的 CSV。但这里我也有大括号和“”。
答案1
我会这样做sed
$ sed -r 's/"\{([0-9]+,).*,([0-9]+)\}"/\1\2/' input
1,4
1,9
34,89
笔记
-r
使用ERE\}
文字{
([0-9]+,)
保存一些数字,后跟逗号供以后使用\1\2
向后引用已保存的模式
(您的输出是缩进的, - 所以也许您想要/ \1\2/
或/\t\1\2/
在替换中 - 根据您的喜好进行调整)
答案2
单程:
awk -F"[}{,]" '{print $2, $(NF-1)}' OFS=, file
您也可以使用花括号作为分隔符,因此可以直接访问元素。
答案3
使用sed
:
sed -e 's/,.*,/,/' -e 's/[^0-9,]//g' file
第一个s
命令将第一个逗号和最后一个逗号之间的所有内容替换为逗号,从而有效地消除了中间的所有内容。
第二个s
命令删除所有非数字或逗号的字符。
答案4
sed -r "s/(\"|\{|\})//g" input.csv|awk -F, '{print $1","$NF}'