2016-02-12 48 views
-1

我有以下格式的線條在它包含了一個以上的線路5逗號文件行:如何顯示使用egrep的或AWK

enter image description here

幫助需要單獨顯示行在一個單獨的文件中包含超過5個逗號。

+1

請張貼相關的例子輸入和輸出以文本格式。發佈你的嘗試(和錯誤)也使你的問題更好! – andlrc

+0

你好。請參閱[問]什麼是一個很好的問題。具體而言 - 鏈接到瞬態非現場圖像作爲您提出問題的基礎並不會對未來的網站用戶有所幫助。嘗試自己解決問題通常也是一個好主意,然後具體說明您遇到問題的位置。 – Sobrique

回答

1

perl有一個tr(translate)運算符,該運算符返回發生的轉換次數。我們可以使用它來計算字符串中的子字符串。

cat file.txt | perl -ne 'print if tr/,// > 5'

+0

或者,如果你喜歡高爾夫,如果tr /,//> 5'file.txt',則'perl -ne'打印 – Hambone

0

使用egrep的:

egrep '([^,]*,){6,}' 

用awk:

awk -F, 'NF>5{print}' 

使用一個sed它有一個 「擴展正則表達式選項」(我將在這裏假設-r,但它可以是-E):

sed -n -r -e '/([^,]*,){6,}/p' 

當然,你必須小心你所要求的。例如,如果您的CSV文件中包含嵌入「值」的逗號,並且如果您只想要多於五個「值」的行,那麼對於不支持CSV的工具而言,事情會變得棘手。

0

圖像中的文字看起來像CSV。 然後,使用AWK ...

awk -F'","' 'NF>5{print}' 

像峯的上述答案。

0

我想你已經在這裏有你的原始問題的答案。然而,如果你真正要問的是如果你想查找有多少行CSV 字段超過5,那麼我認爲你需要像Perl的Text::CSV模塊。

這方面的一個例子是以下字符串:

one,two,three,four,five,"six,seven" 

這有六個逗號,但只有五場。你想看到這一行,還是想跳過它?如果你想看到它(作爲一個例外 - 一個包含5個以上逗號的行),然後使用已經建議的方法之一。

如果你沒有,那麼你真的想要一個CSV分析器和Perl的是相當不錯的 - 比大多數語言更輕便,更容易,在我看來:

use strict; 

use Text::CSV; 

my $csv = Text::CSV->new ({ binary => 1 }); 

open my $IN, "<:encoding(utf8)", "file.csv" or die; 
while (my $row = $csv->getline($IN)) { 
    if (@$row > 5) { 
    $csv->combine(@$row); 
    print $csv->string(), "\n"; 
    } 
} 
close $IN;