Мне дали ответ на форуме LinuxMint:
Добавить для ручной перезагрузки Alsasudo alsa force-reload
Это звучит как странное решение, так как я предполагаю, что перезагрузка все равно перезагрузит модули. Но, по-видимому, этого не произошло, и это решение навсегда устранило проблему.
$ awk '/^ +/{print q, $0; next} {q=$0}' file
Query: D Monthly Loan SourceField: LOAD-NO SourceTable: MASTER
Query: D Monthly Loan SourceField: LO SourceTable: MASTER
Query: D Monthly Loan SourceField: HI SourceTable: MASTER2
QUERY: M FORBEARANCE_1 SourceField: LOAN-NO SourceTable: MASTER
или, если вы предпочитаете любой из этих форматов (, есть много других возможностей!):
$ awk 'sub(/^ +/,""){print q, $0; next} {q=$0}' file
Query: D Monthly Loan SourceField: LOAD-NO SourceTable: MASTER
Query: D Monthly Loan SourceField: LO SourceTable: MASTER
Query: D Monthly Loan SourceField: HI SourceTable: MASTER2
QUERY: M FORBEARANCE_1 SourceField: LOAN-NO SourceTable: MASTER
$ awk '/^ +/{$1=$1; print q, $0; next} {q=$0}' file
Query: D Monthly Loan SourceField: LOAD-NO SourceTable: MASTER
Query: D Monthly Loan SourceField: LO SourceTable: MASTER
Query: D Monthly Loan SourceField: HI SourceTable: MASTER2
QUERY: M FORBEARANCE_1 SourceField: LOAN-NO SourceTable: MASTER
$ awk -v OFS='\t' '/^ +/{$1=$1; print q, $0; next} {q=$0}' file
Query: D Monthly Loan SourceField: LOAD-NO SourceTable: MASTER
Query: D Monthly Loan SourceField: LO SourceTable: MASTER
Query: D Monthly Loan SourceField: HI SourceTable: MASTER2
QUERY: M FORBEARANCE_1 SourceField: LOAN-NO SourceTable: MASTER
С GNU awk:
awk '/^Q/{query=$0; next}; /^ /{gsub(/^ */,"",$0); print query,$0}' file
Выход:
Query: D Monthly Loan SourceField: LOAD-NO SourceTable: MASTER Query: D Monthly Loan SourceField: LO SourceTable: MASTER Query: D Monthly Loan SourceField: HI SourceTable: MASTER2 QUERY: M FORBEARANCE_1 SourceField: LOAN-NO SourceTable: MASTER
gsub(/^ */,"",$0)
удаляет начальные пробелы.
awk '
/^Query:/ || /^QUERY:/ {queryline=$0}
/ SourceField:/ {print queryline " " $0}
' data.txt
Мое решение не приведет вас к желаемому результату, но оно довольно простое, но вы можете разделить исходный код с помощью команды grep go:
# grep Source a|awk '{print "Query: D Monthly Loan" $0}'
Query: D Monthly Loan SourceField: LOAD-NO SourceTable: MASTER
Query: D Monthly Loan SourceField: LO SourceTable: MASTER
Query: D Monthly Loan SourceField: HI SourceTable: MASTER2
Query: D Monthly Loan SourceField: LOAN-NO SourceTable: MASTER
# cat a
Query: D Monthly Loan
SourceField: LOAD-NO SourceTable: MASTER
SourceField: LO SourceTable: MASTER
Query: D Monthly Loan
SourceField: HI SourceTable: MASTER2
QUERY: M FORBEARANCE_1
SourceField: LOAN-NO SourceTable: MASTER
sed -n -e '/^Query:\|^QUERY:/{h;}' -e '/^ *SourceField:/{G;s|\(.*\)\n\(.*\)|\2\1|p;}' file
/^Query:\|^QUERY:/{h;}
Если строка начинается с Query:
/ QUERY:
, поместите ее в пробел. / *SourceField:/
Если строка начинается с любого количества пробелов, за которыми следует SourceField:
, то :G
Добавить содержимое пробела перед ним с помощью новой строки. s|\(.*\)\n\(.*\)|\2\1|p
Поменяйте местами поля вокруг новой строки и распечатайте результат. Упрощенная версия, если ваш sed поддерживает расширенные регулярные выражения:
sed -nE -e '/^Query:|^QUERY:/{h;}' -e '/^ +SourceField:/{G;s|(.*)\n(.*)|\2\1|p;}' file
Выход:
Query: D Monthly Loan SourceField: LOAD-NO SourceTable: MASTER
Query: D Monthly Loan SourceField: LO SourceTable: MASTER
Query: D Monthly Loan SourceField: HI SourceTable: MASTER2
QUERY: M FORBEARANCE_1 SourceField: LOAN-NO SourceTable: MASTER