2011-06-24 12 views
1

とsiml - CSVファイル:SED、AWKまたは何bashので、私は「私にはわからないテキスト」と「一部」を取得する必要がありプロセス私はこのようなファイルましたAWK

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

をツール、別のコマンドにパイプされます。

ヒント?

+1

ファイルから小さな例を挙げてください。また、この宿題はありますか? –

答えて

0

これは単純すぎるようです。これはあなたがawkを初めて使うかもしれないことを意味します。どちらが完璧に受け入れられるか、あなたの質問に間違いがあります。私はその元を願っています。

あなたが求めるものは次のとおりです。フィールドセパレータを "-F\""(エスケープ "with")に設定し、2番目のフィールドを印刷します。最初は "、または何も表示されません。パイプと最後の行を入れて、必要な処理を実行できます。

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


は "いくつかの"

FSは

+0

すべての回答はうまくいきましたが、これは「最もクリーン」です:)ありがとう! – Maxxer

+0

とbtw私はawkを全く知らない:-P – Maxxer

+0

ああ、いいえ、あなたはawk' = Pを気にする必要があります。私は非常にあなたがその機能について読んで数分を過ごすことをお勧めします、多くはあなたが行くように学ぶ方が簡単です。 – matchew

0
sed 's/^\("[^"]*"\).*/\1/' 
フィールドセパレーターである "テキスト私は知りません" 210

これは、余分なマテリアルを削除する簡単な二重引用符を含む行を扱います。変更されていない行はすべて通過します。

あなたは非マッチした行をドロップしたい場合は、:それは一致を見つけたとき

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

これがデフォルトとプリントで印刷されません。次のようなデータフィールドに対処する必要がある場合

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

あなたはかなり難しい仕事をしなければなりません。 sedが拡張正規表現またはPCRE(Perl互換正規表現)をサポートしている場合は、それを実行できます。そうでない場合は、代わりにawkを使用してください。

0

"が出力の一部であるかどうかはわかりません。私が間違っていると、それを出力に追加することは問題ではないはずです(@ Jonathan-Lefflerの回答が非常に良いので、意図的に左のsedに残っています)

最初の文字として"から完璧な解決策が出力されますが、それは簡単です。純粋なbashのを使用して

cut -d\" -f1-2 input 

ソリューション、awkを使用してIFS

#!/bin/bash 

IFS='"' 

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

ソリューション、および"

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

、最終的にはPerlでのものに区切り文字を変更するには-Fフラグの説明については5.1 Bourne Shell Variablesを参照してください。-aは自動分割モードをオンにします - perlは空白の入力行を自動的に@F配列に分割します。 -Fは、-aと組み合わせて使用​​され、行を分割する区切り文字を選択します。

perl -F\" -lane 'print $F[1]' input 
関連する問題