Me gustaría extraer caracteres entre el primer y segundo guión bajo de los nombres de archivo en una carpeta y contar ese tipo de archivos presentes en ella. La carpeta contiene archivos en un formato particular como:
2305195303310_ABC_A08_1378408840043.hl7
2305195303310_ABC_A08_1378408840043.hl7
Q37984932T467566261_DEF_R03_1378825633215.hl7
37982442T467537201_DEF_R03_1378823455384.hl7
37982442T467537201_MNO_R03_1378823455384.hl7
2305195303310_ABC_A08_1378408840053.hl7
Q37984932T467566261_DEF_R03_1378825633215.hl7
37982442T467537201_MNO_R03_1378823455384.hl7
y así
El resultado del script debería darme el resultado como:
ABC 3
DEF 3
MNO 2
echo
for everything; just dols *_*_* | ...
; instead of grep and sort and uniq, count lines with something in an associative array in awk directly:ls *_*_* | cut -d_ -f2 | awk '/./ { count[$1]++; } END {for (f in count) { print f, count[f]; } }'
(note: you can do the cut part in awk as well, of course, but for a comment field that's too awkward (pun unavoidable)).