Генерируйте Порядковый номер для каждой строки в конце.. измененный t, который он отправляет, может кто-то help&suggest на этом

[

] У меня был такой же problam и мне удалось собрать mini Linux, следуя следующим шагам. [

] [

][Boot Mini Linux Test with Qemu][

] [

]Шаги по сборке Mini Linux Distro[

] [
    ] [
  1. ]Скомпилируйте ядро и посмотрите на результат в виде размера компиляции[
  2. ] [
  3. ]Создайте образ rootfs (например, в формате ext2 mke2fs), который будет содержать корневую систему и некоторые базовые программы (используемый busybox)[
  4. ] [
  5. ]Смонтируйте rootfs и создайте основные каталоги и файлы[
  6. ] [
  7. ]Скомпилируйте busybox и установите его в rootfs[
  8. ] [
  9. ]Проверьте размер ядра (с включенными или без включённых модулей) и образ Ciar (с помощью mkdosfs, применённых к образу []linux. img[]), которые содержат linux. img grub или syslinux устанавливают процесс загрузки системы[
  10. ] [
  11. ]После создания rootfs и linux, скопируйте для syslinux.cfg linux.img , bzImage, в linux.img[
  12. ] [
  13. ]Применяет команду []sync[] syslinux, чтобы закончить linux. img image ;[
  14. ] [
  15. ]После всех настроек и установок, протестируйте его с помощью []qemu[], например, следующая команда []qemu linux.img[][
  16. ] [
  17. ]Если все в порядке, система загрузится в базовую оболочку.[
  18. ] [
] [

]Но текущие попытки не могут войти в терминал ( shell )[

] [

]Я оставляю эти шаги здесь в случае, если они могут помочь кому-нибудь или кто-нибудь может помочь мне.[

].
1
26.11.2018, 00:43
3 ответа

В Unix есть эти замечательные маленькие инструменты, которые называются вырезать и вставить . Инструмент вырезать будет извлекать набор столбцов из своего ввода, а инструмент вставить вставляет столбцы. Мы будем их использовать.

Я не собираюсь слишком заботиться о вашем конвейере (прямо сейчас, но посмотрите конец этого ответа), меня просто беспокоит проблема переключения столбцов.

Допустим, у меня есть эти данные в файле с именем cols.txt :

$ cat cols.txt
1 a
2 b
3 c

$ paste -d ' ' cols.txt cols.txt
1 a 1 a
2 b 2 b
3 c 3 c

Утилита paste обычно вставляет табуляцию между столбцами, но здесь мы сказали ей вставить вместо него пробел ( -d '' ).

Затем нужно просто извлечь второй и третий столбцы из вывода paste с помощью cut :

$ paste -d ' ' cols.txt cols.txt | cut -d ' ' -f 2,3
a 1
b 2
c 3

Мы сказали cut что у нас есть пробелы в качестве «разделителей полей» ( -d '' , иначе ожидаются табуляции) и что мы хотели бы иметь поля 2 и 3 ( -f 2,3 ) , пожалуйста. (К сожалению, простой запрос cut для столбцов « 2,1 » в исходном вводе не не поменяет местами столбцы.)

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

Вернемся к вашему конвейеру. Давайте отбросим это.Кажется, что вы хотите вставить номер строки в каждую строку. Для этого есть еще один инструмент Unix, который называется nl ("числовые строки"):

$ nl abc.txt
     1  a
     2  b
     3  c

По умолчанию у вас есть номера строк для каждой непустой строки, которым предшествуют некоторые пробелы для заполнения и отделяются от исходной строки символом символ табуляции. Хотите ли вы также пронумеровать пустые строки, используйте

$ nl -b a abc.txt

Насколько я знаю, вы не можете заставить nl поместить номера строк справа от строки, но это не проблема, потому что мы есть решение, которое меняет местами два столбца ввода:

$ paste <(nl abc.txt) <(nl abc.txt) | cut -f 2,3
a            1
b            2
c            3

Мы отказались от указания здесь разделителей. nl вставит пробелы, за которыми следует номер строки и табуляция в начале каждой строки. paste вставляет вкладку между столбцами, а cut разрезает вкладки, так что это будет работать.

Если вы хотите, чтобы между столбцами был один пробел (теперь есть табуляция и несколько пробелов), добавьте | tr -s '\ t' '' команде. Это изменит («транслитерирует») все табуляции на пробелы и «сожмет» ( -s ) полученные последовательные пробелы в один пробел.

Если вы хотите вместо этого использовать запятую и пробел, используйте | tr '\ t' ',' вместо:

$ paste  <(nl abc.txt) <(nl abc.txt) | cut -f 2,3 | tr -s '\t ' ', '
a, 1
b, 2
c, 3

Это работает с файлом с несколькими словами в каждой строке, но не работает с файлами, содержащими символы табуляции:

$ cat abc.txt    # no tabs in this file though
a text     there is a
b goes     hole in my
c here     pants

$ paste  <(nl abc.txt) <(nl abc.txt) | cut -f 2,3
a text     there is a        1
b goes     hole in my        2
c here     pants             3
0
27.01.2020, 23:37
sed '/./=' | sed '/./{N; s/\(.*\)\n\(.*\)/\2 \1/;}'

Но awk было бы более Stereighforward:

awk '/./ {$0 = $0 " " NR}; {print}'

кажется странным, что вы только номер линейки содержат хотя бы один символ. Если это не было вашим намерением, то вы можете изменить его на:

sed = | sed 'N; s/\(.*\)\n\(.*\)/\2 \1/'
awk '{print $0, NR}'
1
27.01.2020, 23:37

Другим способом выполнения задачи будет использование команды nl с опцией -nln. Это пронумерует строки из файла. Например.

-e "a\nb\nc\n". | nl -nln -

выдаст:

 1  a
 2  b
 3  c

Теперь осталось только переместить числа справа от слов. Это можно сделать с помощью sed следующим образом:

sed 's/^\([^ \t]*\)[ \t]*\([^ \t].*\)$/\2 \1/g'

Что это делает, так это находит первое слово в строке (Чтобы найти первое слово, нужно включить только те символы, которые не являются пробелами и табуляциями. Это делается с помощью [^ \t]) и запоминается как \1, а часть строки, следующая за пробелами, как \2 и заменяет строку на \2 \1.

Итак, заключительной командой будет

имя файла кошки | nl -nln - | sed 's/^\([^ \t]*\)[ \t]*\([^ \t].*\)$/\2 \1/g'

1
27.01.2020, 23:37

Теги

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