Делать подсчет и расщепление в Баш - PullRequest
0 голосов
/ 03 октября 2019

Привет, ребята, нужно несколько советов о том, как еще можно достичь нижеуказанного результата

(До)

    02-10-2019 name_AA_xxxxx.txt  
    02-10-2019 name_AA_xxxxx.txt  
    02-10-2019 name_BB_xxxxx.txt  
    02-10-2019 name_BB_xxxxx.txt  
    02-10-2019 name_CC_xxxxx.txt  

(После)

    02-10-2019 name_AA_xxxxx.txt  
    02-10-2019 name_AA_xxxxx.txt  
    Count : 2  

    02-10-2019 name_BB_xxxxx.txt  
    02-10-2019 name_BB_xxxxx.txt  
    count : 2  

    02-10-2019 name_CC_xxxxx.txt  
    Count 1  

Предположение

  • пожалуйста, предположим, что name одинаков для всех файлов.
  • Идентификатором для всех имен файлов является AA,BB,CC, в фактическом файле будет имя для каждого из них, фактический файл. формат: COMPANYNAME_TYPENAME _ *. txt
  • TYPENAME изменится

Попытка выполнить grep и передать его в WC, он будет работать, но он неэффективен, и я не могу повторно использовать код, сделал немногопоиск и думал об использовании команды awk, но не уверен, как я могу выполнить это.

Быстрое исправление, которое я использую сейчас, - cat input.file | grep TYPENAME для имени, а затем используйте cat input.file | grep TYPENAME | wc -l для проверки количества

Буду признателен за любой совет.

PS: поскольку я не хочу утекать какую-либо конфиденциальную информацию, поэтому стараюсь предоставить как можно больше информации.

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Не могли бы вы попробовать следующее.

awk 'prev!=$2 && count{print "Count : " count;count=""} {count++;prev=$2} END{if(count){print "Count : " count}}' Input_file

С обновленным входным файлом Jnzz ':

awk -F ' +|_' 'prev!=$3 && count{print "Count : " count;count=""; print ""} {count++;prev=$3; print} END{if(count){print "Count : " count}}' Input_file

Вывод:

    02-10-2019 name_AA_xxxxx.txt  
    02-10-2019 name_AA_xxxxx.txt  
Count : 2

    02-10-2019 name_BB_xxxxx.txt  
    02-10-2019 name_BB_xxxxx.txt  
Count : 2

    02-10-2019 name_CC_xxxxx.txt  
Count : 1
0 голосов
/ 03 октября 2019
sort input.file | uniq -c | awk '/name.*/{for (i = 1; i <= $1; ++i) print $3; print "Count : "$1}'

Или, если вам нужно специально напечатать, в частности, для считать 1 :

sort input.file | uniq -c | awk '/name.*/{for (i = 1; i <= $1; ++i) print $3; if ($1>1) printf "Count : "; else printf "Count "; print $1; }'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...