2017-05-25 59 views
0

我有一個csv文件。該文件有一些異常,因爲它包含一些未知字符。查找csv文件中是否存在空格

這些字符出現在流行編輯器的第1535行(下面附有圖片)。這個linedoes的終端中的sed命令沒有顯示任何內容。

$ sed '1535!d' sample.csv 
"sample_id","sample_column_text_1","sample_"sample_id","sample_column_text_1","sample_column_text_2","sample_column_text_3" 

但是下面是各種編輯器中文件的快照。

崇高文本 enter image description here

納米 enter image description here

enter image description here

目錄具有包含此字符/鏈不同的CSV文件。

我需要編寫一個bash腳本來確定具有這些字符的文件。我怎樣才能做到這一點?

+2

擡起你可以用'grep的 '[^ [:打印:]]''查找包含非打印字符的文件或線路。 – user3429660

+0

此命令在我的終端上停頓......不能前進。這個命令是做什麼的,它是如何工作的? –

回答

1

以下是從;

http://www.linuxquestions.org/questions/programming-9/how-to-check-for-null-characters-in-file-509377/

#!/usr/bin/perl -w 

use strict; 

my $null_found = 0; 

foreach my $file (@ARGV) { 
    if (! open(F, "<$file")) { 
     warn "couldn't open $file for reading: $!\n"; 
     next; 
    } 

    while(<F>) { 
     if (/\000/) { 
      print "detected NULL at line $. in file $file\n"; 
      $null_found = 1; 
      last; 
     } 
    } 
    close(F); 
} 

exit $null_found; 

如果它工作需要,可以將其保存到一個文件中,nullcheck.pl並使其可執行文件;

chmod +x nullcheck.pl 

似乎把文件名作爲輸入數組,但如果它在任何發現會失敗,所以我每次只在一個通過。以下命令用於運行腳本。

for f in $(find . -type f -exec grep -Iq . {} \; -and -print) ; do perl ./nullcheck.pl $f || echo "$f has nulls"; done 

以上find命令從Linux command: How to 'find' only text files?

+0

優雅的解決方案! –

1

您可以嘗試tr

grep '\000' filename to find if the files contain the \000 characters.

你可以用它來去除NULL,並使其成爲非NULL文件: tr < file-with-nulls -d '\000' > file-without-nulls