2016-10-31 3 views
0

При чтении результаты экземпляра LS, я пытаюсь отобразить конкретный термин из определенной линии с использованием СЭД:Bash: СЭД -n аргументы

Вот что мне удалось сделать до настоящего времени:

echo $(ls -lAtro | sed -n '3p' | cut -d' ' -f 6) 

Это читается 6-й срок третьей строки. То, что я пытаюсь сделать, это заменить «3p» на более простой переменной, которая позволила бы сделать что-то вроде этого:

linetoread=3 
echo $(ls -lAtro | sed -n "$linetoread" | cut -d' ' -f 6) 

Приведенный выше пример не работает, конечно, но вы получите идею. Что я могу сделать для этого? Заранее спасибо.

+1

'' $ linetoread "' -> '" $ {linetoread} p "'. –

+2

'echo $ (command)' это то же самое, что и 'command'. А во-вторых, [вывод 'ls' не предназначен для синтаксического анализа] (http://mywiki.wooledge.org/ParsingLs). –

+0

Благодарим вас за ответ Джон. Это то, что я пробовал, но ничего не отображает, поэтому я думаю, что это неправильно. –

ответ

0

Попробуйте awk instead-

line=3 ; 
ls -lAtro | awk -v var="$line" 'NR==var {print $6}' 

Это принимает переменную line=3 и подает его в awkawk -v части).

NR==var гарантирует, что вы получите линию, соответствующую вашей переменной.

Затем вы можете изменить часть print $6, чтобы соответствовать любой колонке, которую вы хотите. Обратите внимание, что разделитель по умолчанию - это пробел.

Конечно, как указано в комментариях, вы не должны разбирать вывод ls.