Я проверяю несколько столбцов в файле с разделителями каналов. Второй столбец по умолчанию - '*'.Greping asterisk через bash
E.g. данные файла для проверки:
abc|* |123
def|** |456
ghi|* |789
2-я запись имеет 2 звезды из-за ошибочных данных.
Я teied как:
Value_to_match="*"
unmatch_count=cat <filename>| cut -d'|' -f2 | awk '{$1=$1};1' | grep -vw "$Value_to_match" | sort -n | uniq | wc -l
echo "unmatch_count"
Это дает мне считать как 0, тогда как я ожидал 1 (для **
), как я использовал -w
с Grep, который является точным соответствием и -v, который инвертный матч.
Как я могу grep **
?
Также обратите внимание на 'unmatch_count = cat | ... 'не будет работать. Если вы хотите сохранить вывод команды в переменной, скажите 'var = $ (command)'. –
fedorqui
Трубы 'cat'' cut' и 'cut'to' awk' и 'awk'' grep' просто сумасшедшие. 'awk -F '\ t' -vx =" $ Value_to_match "'$ 2! = x {a [$ 2] ++} END {для (s в a) printf ("% 8d% s \ n ", a [s ], s} 'filename' (угадывая немного там, что вы на самом деле хотите) – tripleee
Я уже не преподаю shell-скрипты в колледже? Хорошее горе ... –