使用 SED 交換 CSV 中的兩個欄

使用 SED 交換 CSV 中的兩個欄

我有一個 CSV 文件,其中包含 10 個不同的欄位(,是分隔符號)。範例資料:

student-id,last,first,hwk1,hwk2,hwk3,exam1,hwk4,hwk5,exam2
pts-avail,,,100,150,100,200,150,100,300
991-78-7872,Thompson,Ken,95,143,79,185,135,95,259

我需要交換field2field3使用sed,但很難理解如何編寫正規表示式。

我嘗試過其他變體:

sed 's/\(.*[,]\)\(.*[,]\)\(.*[,]\)/\1\3\2/g' test

在我的測試文件中:

abc,def,ghi,jkl
1234,5678,abcd,efgh

它工作得很好......我已經看這個有一段時間了但無法弄清楚。有人可以提供一些指導嗎?

答案1

嘗試:

sed 's/^\([^,]*,\)\([^,]*,\)\([^,]*\)/\1\3\2/'

細分:

'^'     start at the beginning of the line
\(  \)  a grouping
[^,]    any character except ','
*       zero or more times
,       the character ','

重複\([^,]*,\)三次。該行的其餘部分保持不變且不符。

使用 awk:

awk 'BEGIN {FS=OFS=","}{t=$2;$2=$3;$3=t;print}'

答案2

sed溶液使用q

$ q -d, -H -O  'select [student-id],first,last,hwk1,hwk2,hwk3,exam1,hwk4,hwk5,exam2 from sample.csv' 
student-id,first,last,hwk1,hwk2,hwk3,exam1,hwk4,hwk5,exam2
pts-avail,,,100,150,100,200,150,100,300
991-78-7872,Ken,Thompson,95,143,79,185,135,95,259

相關內容