Мне нужно взять первые 4 символа первой строки в файле и я нужно в переменной

Получение сообщения "ошибка ввода-вывода буфера" обычно указывает на аппаратную проблему с диском, но может быть и так, что файловая система просит систему делать то, что не имеет смысла в результате ее поврежденного состояния.

Лучше всего запустить fsck на поврежденной файловой системе, а затем посмотреть в /lost+found восстановленные иноды.

0
01.04.2019, 11:10
6 ответов

Использование headиcut:

$ variable=$( head -n 1 sample1.txt | cut -c 1-4 )
$ printf 'variable is %s\n' "$variable"
variable is ABCD

Это извлекает первую строку, используя head, а затем вырезает первые четыре символа, используя cut. Обратите внимание, что некоторые реализации cutмогут возвращать первые четыре байта , а не первые четыре символа (, например. ГНУ cut). Это будет иметь значение, если данные используют многобайтовые символы.

Использованиеsed:

$ variable=$( sed 's/^\(....\).*/\1/;q' sample1.txt )
$ printf 'variable is %s\n' "$variable"
variable is ABCD

Это использует sedи заменяет первую строку ее первыми четырьмя символами, а затем просто выходит из sedпосле вывода модифицированной строки.

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

Ваш вопрос отмечен тегом . В более старой оболочке shвы можете использовать обратные -тики(`...`)для подстановки команд, а не более современные (и более разумные)$(...).

4
28.01.2020, 02:13

Предполагая, что исторический UNIX, который, как я предполагаю, bashили более поздние оболочки не поддерживаются, вы можете сделать это в соответствии с POSIX

if IFS= read -r line 2> /dev/null < file; then 
    result="${line%"${line#????}"}"
    printf '%s\n' "$result" 
else
    printf >&2 '%s\n' 'Unable to read file contents or no newline found in the file'
fi
3
28.01.2020, 02:13

Решение GNUgrep(или совместимое )решение:

variable=$(grep -o -m1 '^....' file.txt)

где

  • -oтолько соответствие выхода
  • -m1остановить после одного совпадения
  • ^начало строки
  • ....любой символ, четыре раза

примечание:

  • -oявляется нестандартным -расширением GNU (, хотя теперь поддерживается несколькими другими реализациями ), которые будут сообщать о первых 4 символах первой строки, имеющей не менее 4.
  • Другими словами, если первая строка с 4 символами является пятой, будут сообщены первые 4 символа этой строки.
3
28.01.2020, 02:13

Если вы используете awk:

var=$(awk 'NR==1 {print substr($0, 1, 4)}' sample1.txt)
2
28.01.2020, 02:13

Выполнено с помощью Python

praveen@praveen:~$ cat script.py 
#!/usr/bin/python
import re
import subprocess
m=re.compile(r'.{4}')
d=[]
h=open('l.txt','r')
for g in h:
    d.append(g.strip())
k=re.search(m,d[0])
print k.group()
praveen@praveen:~$ 

выход

@praveen:~$ python script.py 
ABCD

Второй метод с использованием Python

    #!/usr/bin/python
    import re
    import subprocess
    m=re.compile(r'.{4}')
    d=[]
    h=open('l.txt','r')
    o=h.readline()
    l=re.search(m,o)
    print l.group().strip()

output

n@praveen:~$ python script.py 
ABCD
praveen@praveen
0
28.01.2020, 02:13

Поскольку упоминалось, вам нужно сохранить первые 4 символа первой строки в переменной

command
variable=`awk 'NR==1{print substr($0,1,4)}' filename`

выход

variable=`awk 'NR==1{print substr($0,1,4)}' filename`
echo $variable
ABCD
0
28.01.2020, 02:13

Теги

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