2014-02-19 28 views
1

使用awk我需要在第一個「。」之間找到字符。和第一個空格「」(如果存在)並用空格替換「」。 我有這個結構文件(test.txt的):刪除文件中每行的2個特殊字符串之間的字符串

asdf.test.com 04-05-2014 
qwer.test1.test.com 04-05-2014 
asdfgg 04-05-2014 
sadf 
asdff.com 04-05-2014 

我需要這樣的輸出:

asdf 04-05-2014 
qwer 04-05-2014 
asdfgg 04-05-2014 
sadf 
asdff 04-05-2014 

回答

1
awk NF=NF FS='\\..+ ' test.txt 

結果

 
asdf 04-05-2014 
qwer 04-05-2014 
asdfgg 04-05-2014 
sadf 
asdff 04-05-2014 
+0

,我沒有得到正確的答案。第2列結果丟失。 – BMW

+0

現在知道原因了,原始文件在每行的末尾都有空格。 – BMW

+0

這也將刪除任何空白/空白行。 – Jotne

0

儘量sed的:

cat test.txt | sed 's/\..*\//g' 
+0

除非沒有[無用的'cat'](http://partmaps.org/era/unix/award.html)。 – tripleee

+0

你不需要逃避這個空間,你可以使用:'sed's /\..*// g'' – Jotne

+0

寶馬指出,行不通是行不通的,'。* '貪婪並會刪除所需的數據。這將工作'sed's /\.[^] *// g'test.txt'。 PS永遠不要將文件編入可以自行讀取的程序。 – Jotne

-1

這應該這樣做:

awk '{sub(/\..*/,x,$1)}8' test.txt 
asdf04-05-2014 
qwer04-05-2014 
asdfgg 04-05-2014 
sadf 
asdff04-05-2014 

更新爲建議d由寶馬,因爲在行尾有空白。


或本:

awk -F"[. ]" '{print $1,(NF>1?$NF:x)}' test.txt 
asdf 04-05-2014 
qwer 04-05-2014 
asdfgg 04-05-2014 
sadf 
asdff 04-05-2014 
+0

應該是'awk'{sub(/\..*/,「」,$ 1)} 8'file',如果使用你的代碼,我會得到與@Steven Penny's相同的錯誤,結果中沒有第2列。 (原因是,原始文件在行尾有空白。) – BMW

+0

@BMW不,這會使貪婪的'。*'全部移到行尾。它需要一個空間來知道停止的地方。使用你的代碼,它只在第一個'.'之前打印文本,除了這行'asdfgg 04-05-2014' – Jotne

+0

$ 1 in sub(),而不是$ 0,所以它不會刪除所有的點。並且不需要替換空間:'awk'{sub(/\..*/,"",$ 1)} 8'文件' – BMW

2

使用SED,它可以解決這個問題,在行結束空間。

sed 's/\.[^. ]*//g' file 
相關問題