Как получить количество данных между двумя строками с несколькими происшествиями в том же файле

scp более просто использовать, поскольку требуется меньше аргументов. Я ловлю myselv, использующий scp вместо rsync если я только передаю единственный файл. Propably я только к ленивому для определения псевдонима к rsync... ;-)

0
03.05.2014, 19:43
4 ответа

Учитывая новое лучшее описание проблемы, это на самом деле легче

#!/bin/bash
awk 'BEGIN {
            SETNR=0; 
            MODE="Non-Fields"}
(MODE=="Fields") && (! /START-OF-/ ) && (! /END-OF/ ) {
            print; 
            COUNT++
           }
/START-OF-FIELDS/ {
            COUNT=0; 
            SETNR++; 
            MODE="Fields"
           }
/END-OF/ {
            if (MODE=="Fields") {
                 printf ("Count for data set %d is: %d\n", SETNR, COUNT)
                };
            MODE="Non-Fields"
         }' $*
3
28.01.2020, 02:21

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

#!/bin/bash

awk '! /START-OF-/ {
  if (MODE=="DEFINE") { HEADER=HEADER $0 "|" }
  else if ((MODE=="DATA") && (NF>0)) { print }
}
 /START-OF-FIELDS/ { MODE="DEFINE"; HEADER="" }
 /START-OF-DATA/ {
      print HEADER
      MODE="DATA"
      HEADER=""
     }' | sed 's/|$//'

Это производит:

ID|NAME|DEPT
1|joy|cs
2|sam|ec
ID |NAME|DOB|DEPT|ADDRESS
5|joe|13/2/2001/|ee|street1
3|gwen|4/08/1999|cs|street2

Примечание: Я ленив, таким образом, я добавляю вертикальную панель после каждого поля в заголовке. Затем я использую команду SED для удаления запаздывающих V-панелей впоследствии.

0
28.01.2020, 02:21
sed -n '/^START-OF-DATA$/,/^$/{/^START-OF-DATA$/d;/^$/d;p;}' filename

Это:

  • Соберите строки между START-OF-DATA и следующая пустая строка - /^START-OF-DATA$/,/^$/. С теми строками:
    • Удалите строки разделителя - /^START-OF-DATA$/d и /^$/d
    • Распечатайте остальных - p
0
28.01.2020, 02:21
[115101] Решение в [115584]awk[115585]:

1
28.01.2020, 02:21

Теги

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