2017-05-11 2 views
0

エントリを1行に圧縮し、改行を "\ n"としてエンコードしたログファイルを処理しようとしています。私はすべてを最初の "\ n"まで残し、残りを捨てたい。 awk -F"\n" '{print $1}' fileは機能しません。どちらもawk -F"\\n" '{print $1}' fileです。このコマンドの正しい形式は何ですか?awk: " n"で分割します

+1

'NR == 1 {print $ 0}'おそらく。正確に何を探しているのか、いくつかの例を挙げると助かります。 – eush77

+1

'awk -F 'を試してください。\\\\ n''! –

答えて

2
$ echo 'a\nb' 
a\nb 

$ echo 'a\nb' | awk -F'\\\\n' '{print $1}' 
a 

はなぜだ

  • n =リテラル文字n$0 ~ /n/
  • \nリテラル改行文字を=を($0 ~ /\n/
  • \\ =正規表現定数で使用する場合のバックスラッシュ($0 ~ /\\/
  • \\\\動的正規表現で使用されるときに、動的正規表現は、正規表現に変換すると、その後とき再び解析されます一度解析されなければならない文字列であるため、最後のものであること

$0 ~ "\\\\")バックスラッシュ=その正規表現として使用されるので、2回解析されるので、すべてのエスケープを2倍にする必要があります。

-F "whatever"と言うとき、フィールド区切り文字は基本的に正規表現です(FSの変数を動的正規表現にするためエスケープを2倍にする必要があります)。

0

あなたはこれが(\でバックスラッシュをエスケープし、\nをエスケープ)\nを探し、それ件まですべてを出力します

awk -F '\\\\n' '{print $1}' fileName 

を使用し、\n後にすべてのものを削除したいので。これらの正規表現の比較で上記の文字の使用を検討:ここ

+0

「n」はエスケープする必要はありません。上記の@EdMortonの答えを見てください。 – alvits

関連する問題