2013-10-31 69 views
1

清空我有以下文件設定分割陣列中AWK

Hello. this is an example 
    Car=toyota Fruit=Orange Name=John 
    01 
    Car=toyota Fruit=Orange Name=John 
    02 
    Car=toyota Fruit=Orange Name=John 
    03 
End of the file 

我在殼

awk -F "\t" '{n=split($2,a); for(i=1 ; i<=n ; i++) {if(a[i] ~ "^Fruit*") a[i]=""} print}' myFile.txt 

運行此AWK代碼所以字段分隔符是tab。然後我使用space分割第二個字段。如果我的任何子域(以空格分隔)以Fruit開頭,我想將其刪除。

這不起作用。它不會刪除它。


預計輸出

Hello. this is an example 
    Car=toyota Name=John 
    01 
    Car=toyota Name=John 
    02 
    Car=toyota Name=John 
    03 
End of the file 

請沒有用的額外軟件包。我希望它儘可能默認。 (用awk,sed的,grep的將是巨大的)

+0

顯示您預期的輸出,可能會有更好的辦法。 – anubhava

+0

@anubhava我編輯了這個問題:) – Masster

回答

3

如果我在子域(由空格分隔)與 Fruit我想刪除它開始。

您可以使用sed

$ sed 's/Fruit=[^ ]* //g' inputfile 
Hello. this is an example 
    Car=toyota Name=John 
    01 
    Car=toyota Name=John 
    02 
    Car=toyota Name=John 
    03 
End of the file 
+1

@devnull這工程偉大。但爲什麼不爲名稱工作?我嘗試'sed's/Name = [^] * // g'inputfile'並且名稱不會被刪除? – Masster

+0

@Matin如果'Name'是文件中的最後一個字段,則需要說:'sed's/Name =。* // g'inputfile'。 – devnull

+1

@Matin它對'Name'不起作用的原因是通過說'/ Name = [^] * /'(注意'*'後面的空格),你也試圖匹配一個空格,這可能不存在,因爲它是最後一個字段。 – devnull

2
awk '{gsub(/ Fruit[^ ]*/,"")}1' myFile.txt 

給出:

Hello. this is an example 
    Car=toyota Name=John 
    01 
    Car=toyota Name=John 
    02 
    Car=toyota Name=John 
    03 
End of the file 
+0

無法使用'gsub':/抱歉 – Masster

+0

這將從行中的任何位置替換Fruit字符串,而不僅僅是第二個字段。 – anubhava

+1

@anubhava,從OP:'如果我的任何子字段(用空格分隔)都以水果開頭,我想刪除它' – perreal

2
$ cat file               
Hello. this is an example 
    Car=toyota ForeName=John Name=JohnSmith 
    01 
End of the file 

$ sed -r 's/(^|[[:space:]])ForeName=[^[:space:]]+[[:space:]]*/\1/' file 
Hello. this is an example 
    Car=toyota Name=JohnSmith 
    01 
End of the file 

$ sed -r 's/(^|[[:space:]])Name=[^[:space:]]+[[:space:]]*/\1/' file  
Hello. this is an example 
    Car=toyota ForeName=John 
    01 
End of the file