Многие Lenovos сделаны без аппаратного переключателя и имеют проблемы с списком rfkill
, показывающим, что беспроводная сеть заблокирована. Обычное решение -
sudo -i
echo "blacklist ideapad-laptop" >> /etc/modprobe.d/blacklist.conf
exit
Перезагрузить С помощью GNU sed
(предполагая, что поля на входе разделены табуляцией):
sed 's/\t//9g'
Удаляет 9-й и последний символы табуляции в каждой строке.
Если во входных данных более 16 полей и вам не нужны лишние:
cut -f 1-16 | sed 's/\t//9g'
Ага, разными способами. Я протестировал следующие два файла в файле, созданном:
perl -le 'next if $.==1; for(1..20){print join "\t",1..20 }' > file
Это файл с 20 строками и 20 столбцами, разделенными табуляцией.
Perl
perl -F '\ t' -ale '$ "=" \ t "; print (скрытый) файл
Обратите внимание, что это объединяет все поля с 10-го по конец. Если вы хотите присоединить только 9 к 16, используйте вместо этого:
perl -F '\ t' -ale '$ "=" \ t "; print (скрытый) @F [8..15], (скрытый) файл
awk
awk -F '\ t' 'NR> 1 {
for (i = 1; i <9; i ++) {
printf "% s \ t", $ i
}
for (i = 9; i <= NF; i ++) {{ {1}} printf "% s", $ i
} print ""
} 'file
Как и раньше, это объединит все столбцы после 10-го. Если вы хотите присоединить только 9 к 16, используйте вместо этого:
awk -F '\ t' 'NR> 1 {
for (i = 1; i <9; i ++) {{{1 }} printf "% s \ t", $ i
}
for (i = 9; i <= 16; i ++) {
printf "% s", $ i
}
для (i = 17; i <= NF; i ++) {
printf "\ t% s", $ i
} {{1} } print ""
} 'file
Конечно, решения awk
не очень короткие, но, по крайней мере, вам не нужно указывать все поля рукой.
$ cat file | python -c "import sys
for line in sys.stdin: l=line.rstrip('\r\n').split('\t'); print('\t'.join(l[:9]) + ''.join(l[9:]))
"
s/(([^\t]*\t){8})/\1\n/
h
s/[^\n]*\n//
s/\t//g
G
s/([^\n]*)\n([^\n]*)\n.*/\2\1/
Пример использования:
$ sed -r "s/(([^\t]*\t){8})/\1\n/;h;s/[^\n]*\n//;s/\t//g;G;s/([^\n]*)\n([^\n]*)\n.*/\2\1/" file
Пояснение:
Предположим, что файл
равен
a b c d e f g h i j k l
Разделителем в файле
является табуляция.
sed
читает текущую строку.
a b c d e f g h i j k l
s / (([^ \ t] * \ t) {8}) / \ 1 \ n /
разбивает строку на две части.
a b c d e f g h \ ni j k l
h
сохраняет пространство шаблонов в пространстве хранения.
abcdefgh \ ni jkl
abcdefgh \ ni jkl
s / [^ \ n] * \ n //
удаляет первую часть в шаблоне Космос.
i j k l
a b c d e f g h \ ni j k l
s / \ t // g
удаляет табуляции в пространстве шаблонов.
ijkl
a b c d e f g h \ ni j k l
G
добавляет \ n
и удерживает пространство к пространству шаблонов.
ijkl \ na bcdefgh \ ni jkl
abcdefgh \ ni jkl
s / ([^ \ n] *) \ n ([^ \ n] *) \ n. * / \ 2 \ 1 /
разделяет пространство шаблонов и заменяет его второй и первой частями без \ n
.
a b c d e f g h ijkl
a b c d e f g h \ ni j k l
sed
печатает пространство шаблонов.
Можно изменить код и удалить вкладки в средних столбцах:
s/(([^\t]*\t){3})(([^\t]*\t){4})(.*)/\1\n\3\n\5/
h
s/[^\n]*\n([^\n]*)\n.*/\1/
s/\t//g
G
s/([^\n]*)\n([^\n]*)\n([^\n]*)\n(.*)/\2\1\4/
awk:
awk -v OFS="\t" '{for (i=10; i<=NF; i++) $9 = $9 " " $i; NF = 9; print}' file
Поля 10 в конце добавляются к полю 9, затем количество полей ограничивается первыми 9, и строка печатается с использованием табуляции в качестве разделителя полей вывода.
Я предполагаю, что вы хотите, чтобы объединенные поля были разделены пробелом.
Если нет, измените $ 9 "" $ i
на $ 9 $ i
Предполагая, что несколько строк разделенных таблицей значений, сгенерированных таким образом:
% perl -E 'say join "\t", 1..8 for 1..3'
Затем различные столбцы могут обрабатываться по мере необходимости с помощью соответствующих флагов и переменных и функции доступны на Perl.
% perl -E 'say join "\t", 1..8 for 1..3' \
| perl -pale '$_=join "\t", @F[0..3], join "", @F[4..7] if $. > 1'
1 2 3 4 5 6 7 8
1 2 3 4 5678
1 2 3 4 5678
%