Набор данных CSV в текстовый набор данных

Насколько я знаю, не существует такого понятия, как домашний каталог -группы. Когда вы выполняете cd ~, вы переходите в домашний каталог пользователя, который обычно устанавливается в /etc/passwdи не зависит от вашей группы.

Если вы хотите изменить свой дом, просто:

newgrp - mygroup2
HOME=/home/mygroup2/user
cd ~              # Will move you to $HOME
0
28.09.2019, 14:07
3 ответа

с использованием Миллера (https://github.com/johnkerl/miller), начиная с

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,

и работает

mlr --nidx --fs "," filter -S '$2=="abc"' then cut -f 3 input.txt >output.txt

у вас будет

1/1/18
1
28.01.2020, 02:39
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вместо просто 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. Как только такое поле найдено, печатается 3-е поле.

1
28.01.2020, 02:39

Учитывая, что вам нужны полные совпадения полей:

$ awk -F, 'FNR==1{print FILENAME} /(^|,)abc(,|$)/{print $3}' file
file
1/1/18
1/1/17

или если abcможет фактически содержать метасимволы RE, которые вы хотите обрабатывать буквально, и поэтому вам нужно выполнить сопоставление строки, а не регулярного выражения:

$ awk -F, 'FNR==1{print FILENAME} index(","$0",",",abc,"){print $3}' file
file
1/1/18
1/1/17

или для печати заголовка столбца:

$ awk -F, 'FNR==1{print $3} /(^|,)abc(,|$)/{print $3}' file
s_dob
1/1/18
1/1/17

$ awk -F, 'FNR==1{print $3} index(","$0",",",abc,"){print $3}' file
s_dob
1/1/18
1/1/17
0
28.01.2020, 02:39

Теги

Похожие вопросы