2011-12-22 3 views
2

Я хочу читать вторую строку файла:Чтения до места

$(sed -n 2p $file) 

Это работает довольно хорошо, но я хочу, чтобы прочитать строку только до самого первого места. Любые идеи, как это сделать?

+0

Вы используете замену команды $ (...) по какой-либо причине? обычно мы увидим myDate = "$ (sed ... file)". Удачи. – shellter

+0

Добавили альтернативное решение без использования труб. –

ответ

2

Как об этом:

$ sed -n 2p $file | cut -d " " -f1 
1

Вы можете попробовать что-то вроде этого:

$(sed -n '2s/ .*//p' $file) 

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

0

Вы можете сделать это, чтобы разделить свою строку в массиве, а затем прочитать его по одному слову за раз.

while IFS=" " read -a word; do # storing the line separated by space in an array 
    echo "${word[0]}"; # calling the first array element which is indexed at 0 
done < <(head -n 2 file | tail -n 1) # process substitution of fetching only second line 

Тест:

[jaypal:~/Temp] cat file 
a 212 
b 323 
c 23 
d 45 
e 54 
f 102 

[jaypal:~/Temp] while IFS=" " read -a word; do 
echo "${word[0]}"; 
done < <(head -n 2 file | tail -n 1) 
b 

В качестве альтернативы, если вы просто хотите, быстрое решение с однострочника то следующая будет работать нормально -

awk 'NR==2{print $1}' filename 

тест:

[jaypal:~/Temp] awk 'NR==2{print $1}' file 
b 
Смежные вопросы