1

awkに次の文があります

$ gawk '$2 == "-"  { print $1 }' file

必要な単語を正確に解析できないため、この命令が正確に何をしたのか疑問に思っていました。

編集:次のアスタリスクの前の行をスキップするにはどうすればよいですか? 次の行があるとしましょう:

text
text
text                


            * * * * * * *

line1 - 
line2 -

そして、私はただフィルタリングしたい

line1
line2

私が上に投稿した文で...

$ gawk '$2 == "-"  { print $1 }' file

お時間とご回答ありがとうございます。

4

2 に答える 2

3

これにより、2 番目の列 (スペースで区切られている) が - であるすべての行が検索され、最初の列が出力されます。

最初の部分 ($2 == "-") は、2 番目の列が - であることを確認し、その場合は、添付された {} ブロックを実行し、最初の列 ($0 は行全体、$1 は行全体) を出力します。 $2 などは、最初、2 番目、... 列です。)

スペースは awk のデフォルトの区切り記号であるため、ここでは区切り記号です。

編集:今やりたいことをするには、次のことを試してください(最もエレガントではありませんが、うまくいくはずです。)

gawk 'BEGIN { p = 0 } { if (p != 0 && $2 == "-") { print $1 } else { p = ($0 == "* * * * * * *")? 1 : 0 } }'

何が起こっているのかを明確にするために、さらに多くの行に広げます。

gawk 'BEGIN { p = 0 }
            { if (p != 0 && $2 == "-")
                 { print $1 }
              else
                 { p = ($0 == "* * * * * * *")? 1 : 0 }
            }'
于 2013-08-21T01:55:07.493 に答える