Разделение stdin строками

Если серверы баз данных работают, спросите их:

psql -l

mysql <<< 'show databases'

Просто поиск файловой системы для реляционных баз данных не является тривиальной задачей.

4
26.09.2013, 19:46
3 ответа

Как насчет простого цикла

while IFS= read -r line ;
do
   printf "%s" "$line" | wc -c
done < some-file.txt
7
27.01.2020, 20:46

В то время как - цикл чтения является самым ясным. Если Вы хотите использовать xargs, чтобы сделать что-то для каждой строки, можно закончить с чудовищем как это:

printf "%s\n" "foo bar" one " 1 2 3" | 
xargs -d '\n' -n 1 -I LINE bash -c 'wc -c <<< "LINE"'
8
4
7

Довольно дорогой, так как необходимо породить процесс удара для каждой строки.

4
27.01.2020, 20:46
cat file.txt | while IFS= read -r i; do echo -n "$i" | wc -c; done
##  or (better):
while IFS= read -r i; do echo -n "$i" | wc -c; done < file.txt

Однако это просто распечатает количество символов на строке, одна строка за один раз. Если Вы хотите что-то более читаемое, Вы могли бы хотеть одно из следующего:

##  Prints the contents of each line underneath the character count:
while IFS= read -r i; do echo -n "$i" | wc -c; echo "$i"; done < file.txt
##  Prints the line number alongside the character count:
n=0; while IFS= read -r i; do n=$((n+1)); echo -n "line number $n : "; echo -n "$i" | wc -c; done < file.txt

Для большей мобильности Вы могли использовать printf '%s' "$i" вместо весь echo -ns

3
27.01.2020, 20:46

Теги

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