Получить два значения в каждой строке из существующего файла

Cinnamon, как и GNOME, из которого он был создан, перезапустит сеанс, когда вы наберете rв окне Alt-F2 . Он просто говорит ему повторно -выполнить себя, поэтому он не вызывает новую команду, а говорит оконному менеджеру Cinnamon повторно -выполнить.

1
01.04.2021, 06:44
3 ответа

Вы можете сделать:

$ awk -F'[ =,]' 'BEGIN{ OFS=","; print "Name","number"; }/./{print $2,$4}' input.txt 
Name,number
ABC,3
EFG,2
PQR,2
4
28.04.2021, 22:54

Поскольку вы использовали тег sed:

{
    echo Name,number
    sed -e '/./!d' \
        -e 'h; s/[^,]*,//; s/,.*//' \
        -e 'x; s/^type //; s/=.*//' \
        -e 'G; y/\n/,/' input.txt
} >output.txt

Сначала используется echoдля вывода заголовка. Затем команда sedудаляет все пустые строки и извлекает нужные данные из каждой оставшейся строки. Вывод записывается в output.txt.

Чтобы извлечь нужные данные, сценарий sedсначала сохраняет копию исходной строки ввода в области хранения, используя h. Затем он удаляет все до первой запятой и после следующей запятой, чтобы получить номер. Затем он заменяет сохраненную строку из пробела на xи выполняет аналогичную операцию, чтобы получить метку перед символом =. Затем два результата объединяются с помощью G, а символ новой строки, который вставляется sed, заменяется запятой с помощью команды y///.

1
28.04.2021, 22:54

Замените пробел/=/ новой строкой, что гарантирует отсутствие в пространстве шаблонов. Верните третий маркер, а затем разрежьте пространство шаблона так, чтобы 2-е и четвертое поля вышли на передний план. Которые затем печатаются через P

sed -ne '
  1{x;s/^/Name,Number/p;x;}
  /[^[:space:]]/!d
  y/ =,/\n\n\n/;s/\n/,/3
  s/.*\n\(.*\)\n.*,/\1,/;P
' input.txt

выход:

Name,Number
ABC,3
EFG,2
PQR,2
1
28.04.2021, 22:54

Теги

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