2014-09-26 43 views
1

我想重複字典文件中的單詞,其中每個單詞最初都是在其自己的一行中提到的。在Mac OS X上的`sed`和`awk`中捕獲文本的意外插入行爲小牛

我嘗試使用sedawk命令。

sed 's/^\(.*\)$/\1\1/g' dict.txt 

看來,捕獲文本插入,但沒有改變光標位置,所以輸出保持不變:

...猶太復國主義 猶太復國主義 拉鍊拉上 拉鍊 拉鍊    zipping   zippy ...

另一方面,試圖用\1AAA\1個結果:

... AAAzionist   AAAzionists   AAAzip   AAAzipped   AAAzipper   AAAzippers   AAAzipping   AAAzippy ...

其中,對我來說,是意想不到的。

我也嘗試使用awk命令,在幾種不同的方式如下:

awk '{ print $1, $1 }' dict.txt 

或:

awk '{ print "%s %s", $1, $1 }' dict.txt 

,其中在後一種情況下,我終於可以看到複製,但在意外光標位置,偶爾會導致重複的單詞與前一個重疊:

zoologistogist 
zoologistsgists 
zoologyology 
zoom zoom 
zoomedoomed 
zoomingoming 

有點令人沮喪,因爲我無法理解它。你能幫我理解嗎?

+0

另外請注意,您可以SED的/ ^。* $ /&&/',而不是進行明確的捕獲。 (我仍然包含BOL/EOL錨點,因爲如果您有編碼錯誤,*實際上並不匹配一行中的所有內容)。 – o11c 2014-09-26 21:00:58

+0

@ o11c謝謝。我意識到我可以單獨使用'awk'編程來完成我想要的全部任務,而無需設計複雜的管道命令。我試圖按照他們的「元音內容」對英語單詞進行排序,並且可能列出一些英語語言中對我的學生來說不尋常的,最有聲望的單詞列表(作爲計算機和英語之間的聯合項目) )。我最終提出的代碼是'awk'{word = $ 1; gsub(/ [^ aeiouy] + /,「」);元音= $ 1; printf「%3d %%%s \ n」,長度(元音)/長度(單詞)* 100,單詞}'dict.txt | sort -n |尾巴-100' – 2014-09-27 08:42:28

回答

1

這是由於您的文件中的EOL之前存在\r,這是在Windows編輯器中編輯文件的結果。

使用dos2unix將其轉換:

如果dos2unix不可用,則使用此sed想你的awk/sed命令之前刪除\r

sed -i.bak $'s/\r$//' file 
+0

哇,這是一個棘手的!謝謝! – 2014-09-26 19:52:53

+0

好的,再幫我一點,我怎樣才能用一個標籤分隔的重複單詞替換? – 2014-09-26 19:54:05

+0

你想替換什麼? – anubhava 2014-09-26 20:19:55