2015-02-11 2 views
-1

У меня есть файл FILE1.TXT. Он содержит только одно имя файла FILE2.TXT.Количество строк в UNIX, читая имя файла из другого файла

Как я могу найти количество записей/количество строк FILE2.TXT, используя только FILE1.TXT? Что я уже пробовал:

cat FILE1.TXT | wc -l 

Но вышеприведенная команда не работает.


На самом деле, мне нужно, чтобы отобразить результат, как показано ниже:

File name is FILE2.TXT and the count is 2. 

То, что я уже пробовал это (используя формулировку ниже в файле сценария):

echo "File name is "`cat FILE1.TXT`" and the count is " `wc -l < $(cat FILE1.TXT)` 

Но вышеуказанная команда не работала и дала ошибку

syntax error at line 1: `(' unexpected 
+0

Вам необходимо [Подстановка команд] (http://www.gnu.org/software/ bash/manual/bash.html # Command-Substitution), и вам не нужно 'cat'. –

+0

Возможный дубликат [Цитирование по содержимому файла в Bash?] (Http://stackoverflow.com/questions/1521462/looping-through-the-content-of-a-file-in-bash) – tripleee

+1

Ваши измененные команда работала для меня (используя Bash 3.2 в Mac OS X 10.10.2 Yosemite). Какую оболочку вы используете? Если вы не используете архаичную оболочку (например, '/ bin/sh' для Solaris), она должна работать. Возможно, было бы лучше написать: 'echo 'Имя файла - $ (cat FILE1.TXT), а count - $ (wc -l <$ (cat FILE1.TXT))', где легкость вложенности является одним из достоинств из '$ (...)' обратных котировок. Выход из 'wc' вне двойных кавычек означает, что лишнее свободное пространство на выходе' wc' разделяется 'echo'. –

ответ

-1
file=$(cat FILE1.txt | grep -o "FILE2.txt") 
cat "$file" | wc -l 
+0

Спасибо за ответ. FILE1.TXT кодирует только одно имя файла. Любое решение без цикла будет хорошим. – TechVolcano

+0

Проверить правильное решение. – Shadey

+0

Нет необходимости использовать такую ​​переменную. –

2

Для POSIX-совместимой оболочки:

wc -l $(cat FILE1.txt) 

или, с Bash:

wc -l $(<FILE1.txt) 

Они оба будут сообщать имя файла (но будет работать, если есть несколько имен файлов в FILE1.txt). Если вы не хотите, чтобы имя файла сообщается (но есть только одно имя в файле), вы можете использовать:

wc -l < $(cat FILE1.txt) 
wc -l < $(<FILE1.txt) 
Смежные вопросы