Как считать количество параметров в данной строке в рамках файла CSV

Если вы хотите путь текущего исполняемого исполняемого, посмотрите / proc / $ pid / exe ,

ls -l /proc/$PID | grep exe
-1
01.04.2015, 09:05
2 ответа

Существует несколько программ для создания соединений сокетов из командной строки (или через скрипт оболочки). Наиболее распространенным, вероятно, NetCat, из которых существует как минимум три реализации:

  • Оригинал один © 1995-1996 Avian Research (NetCat Hobbit). Никакая хорошая допустимая связь, о которой я знаю, так вот здесь находится в пакете Debian Tacker: https://tracker.debian.org/pkg/netcat

  • netcat6, переписывание. Сейчас объявлено устаревшим; http://www.deepspace6.net/projects/netcat6.html

  • netcat-openbsd, переписывание проектом OpenBSD. , вероятно, тот, который вы хотите. код можно увидеть в http://bxr.su/openbsd/usr.bin/nc/

  • SOCAT, а не переписать, а ту же идею, со многими дополнительными функциями. Другой хороший выбор Если вам нужны все функции и не против дополнительной сложности. http://www.dest-unreach.org/socat/

Ручная страница дает много примеров, например, вот как (на основе гораздо более страшных пример на странице человека) вы можете запустить BC через розетку:

mkfifo /tmp/f && cat /tmp/f | bc -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f

Затем вы можете подключиться к этой сети BC , используя:

nc localhost 1234

или с SOCAT , это:

socat EXEC:'bc -i' TCP4-LISTEN:1234,bind=127.0.0.1   # server
socat - TCP4:127.0.0.1:1234                          # client
-121--174906-

Мои файлы были закодированы в ISO-8859-1, так что все, что пыталось прочитать вход в мой локаль по умолчанию (UTF-8), не распознает бы японские символы. В конце концов мне удалось решить мою проблему с помощью следующей команды:

env LC_CTYPE=iso-8859-1  grep -nP '[\x80-\xff]' ./*

- Perllike Syntax для диапазонов символов.
-N для печати номеров линии рядом с именами линейки

\ x80 - \ XFF - символы «не ASCII»

изменяют переменную среды LC_CTYPE к ISO-8859- 1 Делает GREP прочитать мои полей Byte-Byte-Byte и позволяет обнаруживать любой «расширенный ASCII» байты как возможные японские символы. Если я использую системную кодировку системы по умолчанию GREP UTF-8, выходит с ошибкой «Неверная последовательность байтов UTF-8 в входе».

-121--105346-

Используйте GREP для гораздо более простых растворов.

grep -E '^(.*,){3}' my_csv_file.csv

Так как 4 параметра или больше будут иметь как минимум 3 запятых, следовательно, 3 в Regex.

(. *,) будет соответствовать параметру, за которым следует запятая. . * означает совпадение любого CHAR (.) 0 или более раз.

Вот еще один подход, чтобы иметь значения в переменной:

my_var=$(grep -E '^(.*,){3}' my_csv_file.csv)
echo "$my_var"

Убедитесь, что у вас есть «« около $ my_var, иначе вы потеряете новые слова.

1
28.01.2020, 05:09

Это, конечно, не задача, которая должна быть решена с SED , GREP , или аналогично, но довольно естественно с awk . Для фильтрации линий в файле с полем не менее 4 (разделенные запятыми):

awk -F, 'NF>=4' my_csv_file.csv

для фильтрации линий с, например, как минимум 4 и не более 6 (разделенные запятыми) полями:

awk -F, 'NF>=4 && NF<=6' my_csv_file.csv
1
28.01.2020, 05:09

Теги

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