web-dev-qa-db-ja.com

AWK-特定の行を印刷しますが、処理されません

次の形式のファイルがある場合:

line1 column1
line2 columnA
line3 column1A
exclude this
line5 column2
line6 columnB
line7 column2B

列を入れ替えたいので、column*の前にline*が出力されます。次のような単純なawkコマンドを使用します。awk '{print $2 " " $1}'を使用して、次のような出力を取得します。

column1 line1
columnA line2
column1A line3
this exclude
column2 line1
columnB line2
column2B line3

ここで、excludeを含む行を印刷するが、再ソートはしないようにします(3行目とは限りません)。このコマンドを使用して次の行を無視することができます:awk '/exclude/{next}{print $2 " " $1}'そして除外された行なしで出力を取得します:

column1 line1
columnA line2
column1A line3
column2 line1
columnB line2
column2B line3

awkexcludeを含む行を印刷するが列を再ソートしないように指示するにはどうすればよいですか?だから私はこのような出力を得るでしょう:

column1 line1
columnA line2
column1A line3
exclude this
column2 line1
columnB line2
column2B line3
3
nath

何かのようなもの

awk '{if(/exclude/){print}else{print $2,$1}}' file.txt

または、同じ結果ですが、少し短くなります。

awk '!/exclude/{$0=$2FS$1}1' file.txt
8
steve