2013-07-10 20 views
0

我正面臨使用awk的問題。其實我有兩種類型的文件。以下是文件的內容。雙引號出現在文件中

File1中

x|y|z|a|b|c 
x|y|z|a|b|c 
x|y|z|a|b|c 

文件2

"x"|"y"|"z"|"a"|"b"|"c" 
"x"|"y"|"z"|"a"|"b"|"c" 
"x"|"y"|"z"|"a"|"b"|"c" 

我必須通過使用AWK來搜索從第二列中的某些值。但問題在於file1具有不帶引號的記錄,而file2具有帶雙引號的記錄。我需要創建一個邏輯來搜索第二列的值。

任何人都可以幫忙嗎?

+0

如何刪除file2中的''''tr -d'」' fedorqui

+0

我們不能刪除引號,因爲腳本中有一些其他邏輯 – vishal

+0

你是什麼意思「搜索」?在兩個文件中搜索'y'?或者是什麼? – Imagination

回答

0

只是過濾引號出與sed 's/\"//g'和管他們與|

$ sed 's/\"//g' file2 
x|y|z|a|b|c 
x|y|z|a|b|c 
x|y|z|a|b|c 

你最終結果的awk會像

$ sed 's/\"//g' file2 | awk <magic goes here...> 
+0

這會將'「|''''''''''''''''''''''''''''''''文件格式改爲'''' - 如果那樣的話,只需通過設置OFS =「|」就可以完全在awk中提供一個簡單的解決方案。然後分配$ 1 = $ 1,所以sed不會有用。 –

1

我注意到有沒有需要清理的文件。爲了尋找價值y這兩個文件中,你可以做到以下幾點:

$ awk -F"|" '$2~/y/' file1 file2 
x|y|z|a|b|c 
x|y|z|a|b|c 
x|y|z|a|b|c 
"x"|"y"|"z"|"a"|"b"|"c" 
"x"|"y"|"z"|"a"|"b"|"c" 
"x"|"y"|"z"|"a"|"b"|"c" 

有了更復雜的輸入:

$ cat file1 
x|y|z|a|b|c 
x|T|z|a|b|c 
x|aa|y|a|b|c 
$ cat file2 
"x"|"y"|"z"|"a"|"b"|"c" 
"x"|"22"|"z"|"a"|"b"|"c" 
"x"|"t"|"y"|"a"|"b"|"c" 

我們得到:

$ awk -F"|" '$2~/y/' file1 file2 
x|y|z|a|b|c 
"x"|"y"|"z"|"a"|"b"|"c" 
1

我希望你貼些樣本輸入(不只是帶有x/y佔位符的格式,而是實際數據)和期望的輸出,所以我們可以測試我們的解決方案,但是這應該做你想做的:

awk -F'"?[|]"?' '$2 == whatever' file 

用你正在尋找的任何東西替換「whatever」,並且用==代替==,如果你想要RE比較而不是精確比較。

如果您也必須能夠查看第一個和最後一個字段,那麼有各種解決方案,「最好」將由您的真實數據確定,但這裏有一種方法,如果您在「不管「:

awk -F'"?[|]"?' ' $1 ~ "^\"?" whatever "$"' file 
awk -F'"?[|]"?' '$NF ~ "^" whatever "\"?$"' file