أحاول استخدام tr مع مجموعات متعددة ولست متأكدًا من كيفية ذلك

StackOverflow https://stackoverflow.com//questions/22003685

  •  20-12-2019
  •  | 
  •  

سؤال

لقد استخدمت:

tr -dc [:alpha:] < $fileDoc | wc -c

لحساب جميع الحروف،

tr -dc ' ' < $fileDoc | wc -c

لحساب جميع المساحات ،

tr -dc '\n' < $fileDoc | wc -c

لحساب كافة الأسطر الجديدة في مستند نصي.

ما أود فعله الآن هو أن أقوم بإحصاء جميع الأحرف الأخرى في المستند كما سأسمي كل شيء آخر.

وهذا هو النص من الوثيقة:

مرحبًا، هذه وثيقة نصية اختبارية.

123

!@#

هل هناك طريقة لحذف كل شيء [:alpha:], , ، و \n وجدت وحساب الشخصيات المتبقية؟

هل كانت مفيدة؟

المحلول

هذا ينبغي أن تفعل خدعة

tr -d '[:alpha:] \n'  < $fileDoc | wc -c

أو ربما إذا كنت تريد تضمين علامات التبويب في تعريف الفراغات

tr -d '[:alpha:][:space:]'  < $fileDoc | wc -c

بناءً على تعليق OP، لحذف الحروف الأبجدية والمسافات والأرقام والأسطر الجديدة وحساب جميع الأحرف المتبقية:

tr -d '[:alnum:][:space:]' < $fileDoc | wc -c

[:alnum:] حسابات الحروف الأبجدية والأرقام. [:space:] يعتني بجميع المسافات البيضاء بما في ذلك الأسطر الجديدة

نصائح أخرى

مجرد النشر هنا كمرجع، إذا كنت ترغب في القيام بكل شيء في لقطة واحدة، فهذا awk يجب أن يعمل البرنامج النصي:

awk -v FS='' '
{
    for(i=1; i<=NF; i++) {
        if($i ~ /[a-zA-Z]/) {alpha++};
        if($i == " ") {space++};
        if($i !~ /[A-Za-z0-9 ]/) {spl++}
    }
}
END {
    printf "Space=%s, Alphabets=%s, SplChars=%s, NewLines=%s\n", space, alpha, spl, NR
}' file

$ cat file
This is a text
I want to count
alot of $tuff
in 1 single shot

$ awk -v FS='' '
{
    for(i=1; i<=NF; i++) {
        if($i ~ /[a-zA-Z]/) {alpha++};
        if($i == " ") {space++};
        if($i !~ /[A-Za-z0-9 ]/) {spl++}
    }
}
END {
    printf "Space=%s, Alphabets=%s, SplChars=%s, NewLines=%s\n", space, alpha, spl, NR
}' file
Space=11, Alphabets=45, SplChars=1, NewLines=4
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top