текст обрабатывает строки в столбцы для блока

Используйте тильду ~ перед путем:

rm -rf ~/path/to/file

или

rmdir ~/path/to/file

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

3
21.05.2018, 12:02
4 ответа

GNUawkподход:

awk 'BEGIN{ max=0 }
     /^List/{ if(k && k>max) { max=k; idx=c } ++c; k=0 }
     NF{ a[c][++k]=$0 }
     END{ 
         for(i=1;i<=max;i++) 
             for(j=1;j<=c;j++) printf "%s%s",a[j][i],(j==c)?ORS:"\t" 
     }' file | column -ts$'\t'

Выход:

List A  List B  List C
hi      Hi      Hello
hello   Yes
hw r u
-1
27.01.2020, 21:21

Вы можете использовать awkдля разделения каждого блока на отдельные файлы, а затем pasteих вместе (ниже предполагается, что между каждым списком всегда есть пустые строки ).

awk '/^$/ {N++;next}{print >"file"N}' infile.txt
paste file*

Также вы можете переместить команду pasteв awk.

awk '/^$/ {N++;next}{print >"file"N} END{system("paste file*")}' inile.txt

Выходной сигнал:

List A    List B    List C
hi        Hi        Hello
hello     Yes
hw r u

чтобы получить красивый отступ при изменении длины строк, как показано ниже:

Входной файл:

list A
hi
hello
hw r u

List B
Hi this is list B
Yes

List C
Hello, this is list C

вы можете сделатьpaste file* |column -s $'\t' -tnи получите результат:

list A  List B             List C
hi      Hi this is list B  Hello, this is list C
hello   Yes
hw r u
3
27.01.2020, 21:21

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

csplit -zs -f outputfile inputfile '/^List/' '{*}'
paste outfile*
  • '/^List/'— это шаблон для сопоставления и разбиения файла на следующий новый файл
  • '{*}'повторить шаблон столько раз, сколько возможно
  • -zиспользуется для удаления пустых выходных файлов;и -sиспользуется, чтобы не печатать подсчет размеров выходных файлов
  • -fиспользуется для определения пользовательского префикса выходного файла ##, где ##по умолчанию 2 цифры, вы можете определить его с помощью-n N(N — количество цифр в суффиксе после определенного префикса)
1
27.01.2020, 21:21

Команда

for i in "List A" "List B" "List C"; do sed -n "/$i/,/^$/p" h.txt >"$i.txt"; done

paste List\ *

выход

List A  List B  List C
hi  Hi  Hello
hello   Yes 
hw r u      
0
27.01.2020, 21:21

Теги

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