ASCII control characters

Giorgos Keramidas keramida at ceid.upatras.gr
Mon Dec 20 13:43:43 EET 2004


On 2004-12-20 13:05, Alexandros Papadopoulos <apapadop at alumni.cmu.edu> wrote:
> Προσπαθώ να βγάλω όλες τις άδειες γραμμές από ένα αρχείο ASCII που
> δημιουργείται από ένα σύστημα εκτός του ελέγχου μου. Ένα μέρος από το
> αρχείο είναι το εξής:
> alex at debian:~/playground$ cat calls
> 05.11.04%08:25:52%1%821%00:00:26%2106331795           %35
>
> 05.11.04%08:29:04%1%823%00:00:30%2106331795           % 1
>
> 05.11.04%10:04:41%1%825%00:01:44%2103454700           % 2
>
> 05.11.04%10:52:08%1%819%00:00:00%2107354100           % 2
>
> Κάνω λοιπόν και γω ένα grep -v ^$ περιμένοντας να κόψει τις άδειες
> γραμμές:
>
> alex at debian:~/playground$ grep -v ^$ calls
> 05.11.04%08:25:52%1%821%00:00:26%2106331795           %35
>
> 05.11.04%08:29:04%1%823%00:00:30%2106331795           % 1
>
> 05.11.04%10:04:41%1%825%00:01:44%2103454700           % 2
>
> 05.11.04%10:52:08%1%819%00:00:00%2107354100           % 2

Το grep -v '^$' θα παίξει σωστά αν αυτό που θες είναι να κόψεις τις
"άδειες" γραμμές, αυτές που δεν έχουν κανένα χαρακτήρα.  Αν θες να
κόψεις και τις γραμμές που έχουν μόνο κενά ή TABs, σου προτείνω:

	$ grep -v '^[[:space:]]*$' datafile

> Τίποτα... χμμμ, κοιτάμε το αρχείο με το od(1):
>
> alex at debian:~/playground$ od -t c calls
> 0000000   0   5   .   1   1   .   0   4   %   0   8   :   2   5   :   5
> 0000020   2   %   1   %   8   2   1   %   0   0   :   0   0   :   2   6
> 0000040   %   2   1   0   6   3   3   1   7   9   5
> 0000060                           %   3   5  \n      \n   0   5   .   1
> 0000100   1   .   0   4   %   0   8   :   2   9   :   0   4   %   1   %
> 0000120   8   2   3   %   0   0   :   0   0   :   3   0   %   2   1   0
> 0000140   6   3   3   1   7   9   5
> 0000160           %       1  \n      \n   0   5   .   1   1   .   0   4
> 0000200   %   1   0   :   0   4   :   4   1   %   1   %   8   2   5   %
> 0000220   0   0   :   0   1   :   4   4   %   2   1   0   3   4   5   4
> 0000240   7   0   0                                               %
> 0000260   2  \n      \n   0   5   .   1   1   .   0   4   %   1   0   :
> 0000300   5   2   :   0   8   %   1   %   8   1   9   %   0   0   :   0
> 0000320   0   :   0   0   %   2   1   0   7   3   5   4   1   0   0
> 0000340                                           %       2  \n
> 0000356
> alex at debian:~/playground$
>
> Μπορεί κάποιος να μου πει πώς θα ξεφορτωθώ αυτές τις κενές γραμμές; (το
> original αρχείο είναι δεκάδες χιλιάδες γραμμές και η κενή γραμμή πέφτει
> για κάποιο λόγο κάθε 60 γραμμές)

Μη βασιστείς στο γεγονός ότι η ``κενή'' γραμμή (που τελικά δεν είναι και
τόσο κενή) φαίνεται να πέφτει σε συγκεκριμένο μέρος, εκτός κι αν δικό
σου πρόγραμμα δημιουργεί το αρχείο (οπότε θα μπορούσες να διορθώσεις το
πρόγραμμα αντί να παλεύεις με το output που βγάζει, αλλά αυτό είναι
εντελώς διαφορετική ιστορία).

Η καλύτερη λύση είναι να χρησιμοποιήσεις κάτι σαν το col(1):

	$ cat datafile | col -b | grep -v '^[[:space:]]*$' > outfile

Κάτι τέτοιο θα κάνει αυτό που θέλεις.

- Γιώργος




More information about the Linux-greek-users mailing list