剪切 CSV 中的第一个和最后一个元素

剪切 CSV 中的第一个和最后一个元素

我在 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}'

相关内容