2011-06-24 75 views
1

一個SIML-csv文件我有一個文件是這樣的:過程與AWK

"text I don't know" command other "text" 
"some" different text "type" 

我需要獲得「文本我不知道」和「一些」,使用sed,awk的或任何慶典工具,被傳送到另一個命令。

任何提示?

+1

舉一個小例子。另外,這功課呢? –

回答

0

這看起來過於簡單,這意味着您可能對awk陌生。這是完全可以接受的,或者我誤解了你的問題。我希望它的前者。

下面應該做你所要求的。將字段分隔符設置爲「-F\"(跳過」with「)並打印第二個字段,第一個字段位於」左側「,或者什麼也不是,您可以放一個管道和行尾來做你想做的事情

awk -F\" '{print FS$2FS}' inputFile.txt

「的文字我不知道」
「一些」

FS是現場分隔符

+0

所有的答案都很好,但這是「最乾淨的」:)謝謝! – Maxxer

+0

btw我完全沒有意識到awk :-P – Maxxer

+0

哦,不,你必須知道'awk' = P,它真的非常有用,特別是對於基本的文本操作。我強烈建議你花幾分鐘時間閱讀其功能,其中很多內容更容易學習。 – matchew

0
sed 's/^\("[^"]*"\).*/\1/' 

這涉及包含一個簡單的雙引號字段放棄任何額外的材料的行。它通過任何不匹配的行。

如果你想刪除不匹配的行,則:

sed -n '/^\("[^"]*"\).*/s//\1/p' 

當它找到一個匹配這不默認,並打印打印。

如果你要處理的數據字段,如:

"He said, ""It's horrid""" and he meant it! 

那麼你必須工作相當困難。如果您的sed支持擴展正則表達式或PCRE(Perl兼容的正則表達式),那麼您可以這樣做。如果不是,請改用awk

0

不知道是否"應該是輸出的一部分或不是,假設不是。如果我錯了,將它添加到輸出中應該不會有任何問題(故意從下面的列表中排除sed,因爲@ Jonathan-Leffler的答案非常好)

不是自從"作爲第一個字符輸出後,這是一個完美的解決方案,但它很簡單。使用純的bash

cut -d\" -f1-2 input 

解,參見5.1 Bourne Shell Variables使用AWK IFS

#!/bin/bash 

IFS='"' 

while read -ra LINE; 
do 
    echo ${LINE[1]} 
done < input 

解的解釋,並且-F標誌以改變分隔符來"

$ awk -F\" '{print $2}' input 

和最後一個在Perl 。-a打開autosplit模式 - perl會自動將輸入行分割成@F陣列。 -F與-a一起使用來選擇分割線的分隔符。

perl -F\" -lane 'print $F[1]' input