Linux

剪切 CSV 中的第一個和最後一個元素

  • January 2, 2017

我在 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。但這裡我也有花括號和“”。

我會這樣做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/在替換 - 隨心所欲地調整)

單程:

awk -F"[}{,]" '{print $2, $(NF-1)}' OFS=,  file

您也可以使用花括號作為分隔符,因此可以直接訪問元素。

引用自:https://unix.stackexchange.com/questions/332785