Попробуйте этот AWK!
awk '{a[$0]++} END {for (x in a) if (a[x] == 1) print x}'
С perl:
$ perl -lne 'print for /(\b35=[^,]+)/g' filename
35=A
35=BCD
35=EF
35=G
или, возможно, в более общем случае/надежно с использованием модуля Text::CSV
$ perl -MText::CSV -lne '
BEGIN{$p = Text::CSV->new()}
print for grep { /^35=/ } $p->fields(), $p->parse($_)
' filename
35=A
35=BCD
35=EF
35=G
Осмотр Perl с grep работает очень хорошо.
grep -oP '(?<=35\=).*?(?=,)'
Возвращает точную информацию за вычетом бита 35=
grep -oP ' (?<=35\=).*?(?=,)' file.csv
вернет это
A
BCD
Г
EF
Использование tr
для замены всех запятых символами новой строки, а затем grep
для получения всех строк, начинающихся со строки 35=
:
$ tr ',' '\n' <data.in | grep '^35='
35=A
35=BCD
35=EF
35=G
Чистое решение Bash:
( # Use parentheses as scope for IFS
IFS=$',\n' # Split on both , or \n
for c in $(</tmp/file.csv) # For every column or row
do
[[ "$c" =~ ^35= ]] && echo ${line##35=} # Find ^35= and print while removing ^35=
done
) # Optionally >/tmp/filtered-output.txt
Обратите внимание, используйте это только из-за его удобочитаемости и гибкости — если вы можете его прочитать, в противном случае вы можете использовать следующий подход:
# Read | Replace | Find | Remove
cat /tmp/file.csv | tr ',' '\n' | grep '^35=' | sed 's/^35=//'
, который более интуитивно понятен и эффективен. .
Ввод (/tmp/file.csv):
35=A,D=35,C=129,ff=136
D=35,35=BCD,C=129,ff=136
900035=G,D=35,C=129,ff=136
35=EF,D=35,C=129,ff=136,35=G
36=o,D=35,k=1
Вывод:
A
BCD
EF
G
С GNU grep
, который поддерживает опцию -o
для печати только совпадающих строк, каждая на отдельной строке
$ grep -oE '\b35=[^,]+' ip.csv
35=A
35=BCD
35=EF
35=G
\b
является границей слова, поэтому что 900035
не будет соответствовать[^,]+
для соответствия одному или нескольким не,
символам ,
С awk
$ awk -F, '{ for(i=1;i<=NF;i++){if($i~/^35=/) print $i} }' ip.csv
35=A
35=BCD
35=EF
35=G
-F,
установить ,
в качестве разделителя полей ввода for(i=1;i<=NF;i++)
перебрать все поля if($i ~/^35=/)
если поле начинается с 35=
напечатайте $i
напечатайте это поле Аналогично perl
perl -F, -lane 'foreach (@F){print if /^35=/}' ip.csv