data-file
コンテンツ:
k = 0.1667 0.0962 0.0000 ( 4922 PWs) bands (ev):
-7.1689 -7.1043 -6.1682 -6.0658 1.1309 1.5196 3.0894 3.1087
3.3846 3.7588 4.2143 4.2220 4.3882 4.4011 5.1222 5.6229
5.9506 6.2078 8.4442 8.8100 8.8150 8.8529 8.9070 9.0070
9.5911 9.6311 13.5626 14.3720 15.0169 15.2435
end1
end2
end3
awk
このデータに対して2つのコマンドを試しました...
1.
awk -F'=' '/[[:blank:]]k/{w=w""$2}; { print w}' data-file
出力:
0.1667 0.0962 0.0000 matrix :
0.1667 0.0962 0.0000 matrix :
0.1667 0.0962 0.0000 matrix :
0.1667 0.0962 0.0000 matrix :
0.1667 0.0962 0.0000 matrix :
0.1667 0.0962 0.0000 matrix :
0.1667 0.0962 0.0000 matrix :
0.1667 0.0962 0.0000 matrix :
0.1667 0.0962 0.0000 matrix :
2.
awk -F'=' '/[[:blank:]]k/{w=w""$2}; { print w;w=""}' data-file
出力:
0.1667 0.0962 0.0000 ( 4922 PWs) bands (ev):
(Eight newlines are printed after that.)
2番目のコマンドを使用すると、検索されたパターンは一度だけ印刷されますが、空白行がより多く表示されます。ただし、最初のコマンドはパターンを9回印刷します。コマンドの違いは何ですかawk
?もっと印刷する理由、空白行を印刷する理由は何ですか?
これらの空白行の印刷をどのように抑制できますか?
ベストアンサー1
なぜもっと印刷されますか?
スクリプトawk
にはモードのない操作があります。つまり、各入力行に対して実行されます。何度も検索されたパターンを印刷したくない場合しないでください。。
空白行を印刷する理由
印刷w
してから設定するからですw=""
。その後、w
各入力行に対して再印刷します。
このような漠然とした質問のため、明確に説明するのは難しいですが、推測するあなたはこれをしたいと思います:
awk -F'=' '/[[:blank:]]k/{ print $2 }' data-file