2013-05-11 35 views
-1

我需要轉換下面awk命令的sed的進入,
awk -F ',' '$2 ~ /^ *[0-9]*(\.[0-9]+)?" *$/{sub(/"/, "", $2); print $2}'需要轉換下面awk命令的sed的進

下面是我的輸入文件:

sample.txt的:

3",3"
6-position,6-position
7' 4" to 10' 3-1/2",7' 4" to 10' 3-1/2"
4.8",4.8"
Adjustable from 99" to 111" - max 148,Adjustable from 99" to 111" - max 148

,我需要如下的輸出,

output.txt的:

3",3
6-position,
7' 4" to 10' 3-1/2",
4.8",4.8
Adjustable from 99" to 111" - max 148,
所以基本上我需要打印「符號的數字值,其他非數字文本需要被替換爲空行,awk命令的問題是2,3和5行被刪除。

+0

真的很好,你有'-F「」' ,並且在你的awk代碼中還有'$ 2'。但我在輸入文件中找不到任何逗號。你是否複製了錯誤的awk行? – Kent 2013-05-11 22:30:18

+0

你有完美的工作'sed'解決方案作爲你的早期問題的答案是完全一樣的... – 2013-05-11 22:34:42

+0

否@AdrianFrühwirth,Sed命令不起作用 – 2013-05-11 22:52:49

回答

1

爲我評論,awk的一個班輪不會爲你的輸入文件是有意義的。但是,您可以嘗試以下sed行:

sed -r '/^[0-9.]+"$/{s/"$//;n;};s/.*//' file 

這適用於您的輸入文件。

kent$ cat file 
3" 
6-position 
7' 4" to 10' 3-1/2" 
4.8" 
Adjustable from 99" to 111" - max 148  
kent$ sed -r '/^[0-9.]+"$/{s/"$//;n;};s/.*//' file 
3 


4.8 
(here, the last line is empty too.) 

編輯

刪除-r選項,並調整sed的與新的輸入/輸出工作:

sed  's/^\([^,]*,\)\([0-9.]*\)".*$/\1\2/;t;s/^\([^,]*,\).*/\1/' file 

這符合您的新的輸入例如工作:

kent$ cat file 
3",3" 
6-position,6-position 
7' 4" to 10' 3-1/2",7' 4" to 10' 3-1/2" 
4.8",4.8" 
Adjustable from 99" to 111" - max 148,Adjustable from 99" to 111" - max 148 

kent$ sed 's/^\([^,]*,\)\([0-9.]*\)".*$/\1\2/;t;s/^\([^,]*,\).*/\1/' file 
3",3 
6-position, 
7' 4" to 10' 3-1/2", 
4.8",4.8 
Adjustable from 99" to 111" - max 148, 
+0

嗨@Kent我錯過了將其添加到輸入文件中。但我想要在第2列上執行sed,而我的unix版本不接受sed -r – 2013-05-11 22:52:13

+0

@GanzRicanz請參閱編輯,它應該與您的示例一起工作。 – Kent 2013-05-11 23:30:20

+0

我只收到空文件。 – 2013-05-11 23:51:46

0

這個工作對我來說:

sed -e 's/^\([0-9]\+\(\.[0-9]\+\)*\)"$/\1/g' \ 
-e '/^\([0-9]\+\(\.[0-9]\+\)*\)$/! s/^.*$//g' sample.txt 
+0

嗨@Ravoori,如何使用此命令爲特定的列? – 2013-05-11 22:50:18

0

你可以用awk和awk SED。 因爲我的手機上有沒有Linux(殼),我會盡力幫忙的一個sed的解決方案:

sed -e 's/^([0-9.]+)"$|.*/\1/g' < file 

應該做的工作