Попытка добавить новую строку к команде вставки

Можно использовать stat управляйте и получите примерно, что Вы хотите:

$ stat -c '%A %a %h %U %G %s %y %n' *
drwxrwxr-x 775 2 saml saml 4096 2013-05-16 22:02:13.230463837 -0400 alsa
drwxrwxr-x 775 31 saml saml 4096 2013-03-26 12:09:20.707827127 -0400 apps
-rw-rw-r-- 664 1 saml saml 43627 2013-05-18 12:28:32.157583577 -0400 autosave.h2song
-rw-rw-r-- 664 1 saml saml 3283 2013-05-18 02:49:41.565154101 -0400 bbbb
drwxrwxr-x 775 4 saml saml 4096 2013-05-03 06:56:50.087842384 -0400 bin
-rw-rw-r-- 664 1 saml saml 4403 2013-05-18 19:20:05.819681196 -0400 blahblah

Вот очищенная версия, если Вы хотите ее:

$ stat -c '%A %a %h %U %G %s %y %n' *| sed 's/\.[[:digit:]]\+[ ]\+-[[:digit:]]\+/ /'
drwxrwxr-x 775 2 saml saml 4096 2013-05-16 22:02:13  alsa
drwxrwxr-x 775 31 saml saml 4096 2013-03-26 12:09:20  apps
-rw-rw-r-- 664 1 saml saml 43627 2013-05-18 12:28:32  autosave.h2song
-rw-rw-r-- 664 1 saml saml 3283 2013-05-18 02:49:41  bbbb
drwxrwxr-x 775 4 saml saml 4096 2013-05-03 06:56:50  bin
-rw-rw-r-- 664 1 saml saml 4403 2013-05-18 19:20:05  blahblah

Смотрите на stat страница справочника для большего количества операторов формата, которые можно использовать в addtion для тех выше.

Ссылки

5
16.10.2014, 00:30
5 ответов

Попробуйте это решение с двумя дополнительными временными файлами:

paste tmp1 tmp2 > tmp12
paste tmp4 tmp5 tmp6 > tmp456
paste -d "\n" tmp12 tmp3 tmp456 > tmp7

Это решение было основано на предположении, что опция --d выбирает разделитель глобально для всех входных файлов, так что это либо будьте пустым или новую строку. Таким образом, это правда с более поздних возникновений -D , перезаписать предыдущие. Однако, как @DIGITALTRAUUMA указал, что мы можем поставить более одного разделителя, который будет использоваться последовательно. Так что решение @ DigitalTrauma более элегантно, чем мой, так как он полностью избегает дополнительных временных файлов.

Одним из нишевых приложений для моего решения будет иметь место, в котором необходимо использовать один или разделители более одного символа каждый . Это не должно быть возможно только с использованием опции -D .

7
27.01.2020, 20:34

Вы можете получить, комбинируя паста и awk :

paste -d'|' tmp1 tmp2 tmp3 tmp4 tmp5 tmp6 | awk 'BEGIN { FS = "|" }; {print $1, $2 "\n" $3 "\n" $4, $5, $6}' > tmp7

:

paste -d'|' tmp1 tmp2 tmp3 tmp4 tmp5 tmp6 | awk 'BEGIN { FS = "|" }; {print $1, $2 "\n" $3 "\n" $4, $5, $6}' > tmp7

Пример вывода из некоторых данных, которые я бросил вместе для файлов TMP:

Bill Kerman
123 Main St.
Kerbopalis Kerbskatchewan 12345
Bob Germin
321 Sesame St.
Kerbington Kermont 31416
0
27.01.2020, 20:34

Я думаю, что эта часть PAPE MAN PAGE - это то, что Вы хотите:

  -D, --delimiters = список
  Повторно используйте символы из списка вместо вкладок
 

Итак, этот одноклассник должен работать в вашем случае:

paste -d" \n\n  " tmp1 tmp2 tmp3 tmp4 tmp5 tmp6 > tmp7

работает, как ожидалось, с примерами образца @ DOPEGHOTI:

$ grep . tmp*
tmp1:Bill
tmp1:Bob
tmp2:Kerman
tmp2:Germin
tmp3:123 Main St.
tmp3:321 Sesame St.
tmp4:Kerbopalis
tmp4:Kerbington
tmp5:Kerbskatchewan
tmp5:Kermont
tmp6:12345
tmp6:31416
$ paste -d" \n\n  " tmp1 tmp2 tmp3 tmp4 tmp5 tmp6
Bill Kerman
123 Main St.
Kerbopalis Kerbskatchewan 12345
Bob Germin
321 Sesame St.
Kerbington Kermont 31416
$ 

я успешно проверил это с помощью в пасте из GNU Coreutils 5,97 и 8.21 и BSD (OS X). Не уверен, что другие версии пасты в дикой природе.

4
27.01.2020, 20:34

Эта команда должна работать.

 paste -s tmp1 tmp2 -d '\n' tmp3 -d '\n' tmp4 tmp5 tmp6 > tmp7
1
27.01.2020, 20:34
sort -dk2,2 phpbook |
sed "s/\t/\n/3;s//\n/2;s// /g"

Насколько я понимаю, у вас есть файл с именем phpbook , который состоит из строк записей телефонной книги, которые выглядят следующим образом:

{first}\t{last}\t{address}\t{city}\t{state}\t{zip}

Вы хотите отсортировать их на {last} , добавить новые строки после {last} и ] {address} для каждой записи, переведите \ t abs в , а затем распечатайте результаты в stdout . Если это не тогда я не могу понять, что еще могла бы сделать ваша команда - но я могу быть хорошеньким иногда.

Обратите внимание, что sort по умолчанию ограничивается символами, поэтому:

sed 's/\t/,/g' | sort ... -t ,

... вероятно, не стоит этого делать.

Обдумывание - это еще кое-что, и я полагаю, что весьма вероятно, что ваши разделители смешаны, и начальный sed предназначен для их нормализации. В этом есть смысл. Может быть, типа:

1,2\t3\t4,5,6

... или что-то в этом роде. В этом случае необходим первоначальный перевод. Так что, может быть ...

tr , \\t <phbook | sort ... | sed ...

будет немного лучше. Также ...

sort ... -k 2

... может быть проблематичным в крайних случаях, потому что при его использовании вы не сортируете только второе поле, а скорее от второго поля до конца строки. . Обычно, когда люди делают это, они действительно хотят -k2,2 , который ограничивает данные sort рассматривает только второе поле.

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

...sort -dk2,2 -k1,1

... который сортирует в первую очередь по фамилиям и во вторую очередь по именам. Таким образом, Зед Смит будет каждый раз следовать за Альфой Смитом .

В любом случае, если не ошибаюсь, я прав, сортировка | Конвейер sed выше должен делать все это. Я предполагаю, что ваш sed понимает используемые мной сценарии \ e , но если это не так, вы можете попробовать заменить цитируемый sed сценарий на:

s/<literal TAB>/\
/3;s//\
/2;s// /g
-1
27.01.2020, 20:34

Теги

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