Переменная для количества строк в файле - PullRequest
4 голосов
/ 27 февраля 2012

Я пытаюсь поместить число строк в файле в целочисленную переменную.

Вот как я это делаю

typeset -i x
x=`wc -l $1`

, где $ 1 - командная строкаarg

Проблема в том, что wc -l дает число и имя файла, например: 5 blah

Есть ли способ поместить число только в x?

Ответы [ 7 ]

9 голосов
/ 27 февраля 2012
x=$(wc -l < "$1")

Это позволяет избежать бесполезного использования cat и любых вилок и будет работать на пути, содержащем пробелы и даже символы новой строки.

9 голосов
/ 27 февраля 2012

Вы могли бы сделать cat $1 | wc -l вместо.

или wc -l $1 | cut -d " " -f 1.

1 голос
/ 27 февраля 2012

Вы можете использовать оболочку для удаления имени файла. Преимущество этого состоит в том, что второй процесс не запускается как cat, cut, sed или awk:

var=$(wc -l _your_file_)
nb_lines=${var%% *}

Вы также можете переписать nb_lines=${var%% *} с помощью nb_lines=${var/ */}, but the 2nd form is less portable being bash`.

Обновление

Я читал выше, что некоторые выходные данные wc начинаются с пробелов, поэтому вышеприведенное можно переписать:

#var=$(wc -l _your_file_)
var="   3    file"
var=$(echo $var)
nb_lines=${var%% *}

Использование echo для избавления от лишних пробелов.

1 голос
/ 27 февраля 2012

Или с sed ...

wc -l $1 | sed 's/^ *\([0-9]*\).*$/\1/'

Или, если предположить, что первый пробел после числа:

wc -l $1 | sed 's/ .*$//'
1 голос
/ 27 февраля 2012
wc -l $1 | awk '{print $1}'

с awk

0 голосов
/ 23 апреля 2018
filename=’test.txt'
line_no=$(cat ${filename} | wc -l)
echo ${line_no}
0 голосов
/ 22 марта 2018

Если вы пытаетесь поместить номера строк в файл, который я рекомендую.

В окнах:

awk '{print NR " " $s}' filename > ouputfile

В Linux:

cat -n file > outputfile

Я разделил их, потому что в Windows нельзя запустить cat -n, поэтому пришлось использовать awk.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...