Linux

CSV 數據集到文本數據集

  • September 29, 2019

我有一個 1000 行和 10 列的 csv 數據集 student.csv。

範例數據如下所示:

s_id,s_name,s_dob,s_class,s_marks,s_parentname,
  1,abc,1/1/18,5,49,def,
  2,xyz,1/1/17,4,85,abc,
  3,pqr,1/2/18,2,78,mnp,

從這個數據集中,我想將行中包含“abc”的所有日期復製到文本文件中。

預期輸出:

text.txt
1/1/18
1/1/17
grep abc student.csv | cut -d, -f 3 >text.txt

這將首先從任何地方提取student.csv包含子字元串的每一行abc,然後從這些行中刪除第三個逗號分隔的列並將它們儲存在text.txt.

使用問題中給出的數據,text.txt最終將包含

1/1/18
1/1/17

這依賴於原始文件是一個簡單的CSV 文件,即沒有包含嵌入逗號或換行符的欄位。

是否要abc作為一個完整的詞進行搜尋,然後使用grep -w abc來代替 just grep abc。這將避免匹配包含類似字元串的行abcde,但仍會匹配包含abc xyz.

如果您正在尋找包含任意複雜字元串的欄位(仍然在一個簡單的 CSV 文件中),並且如果您需要該欄位與該字元串完全相等,那麼您必須遍歷每一行的欄位:

string='some string' awk -F, '{ for (i = 1; i <= NF; ++i) if ($i == ENVIRON["string"]) { print $3 ; next } }' student.csv

awk程式碼遍歷每一行上的所有欄位,尋找一個逗號分隔的欄位,其值與環境變數的值完全相同string。一旦找到這樣的欄位,就會列印第三個欄位。

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