Linux
CSV 數據集到文本數據集
我有一個 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
來代替 justgrep 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
。一旦找到這樣的欄位,就會列印第三個欄位。