2017-05-31 8 views
0

私は次のawkコマンドを使用して、最初の2つの列をfile_aから選択し、file_bに出力します。awkは空白行を残す

awk '{print $1"\t"$2}' file_a > file_b 

はタブで区切られており、空白の行がいくつかあります。上記のコマンドを実行すると、空白行は\ t \ nとして出力され、そのまま\ nにしておきます。 awkコマンドで何を変更する必要がありますか?

答えて

2
awk '{print (NF ? $1"\t"$2 : $0)}' file_a > file_b 
+2

を私は自分自身を誇りに感じる:私はほとんど同じ溶液:)それがない – fedorqui

0

は少し短い

awk 'BEGIN{FS=OFS="\t"} {if(NF) print $1,$2; else print}' file 

または

awk 'BEGIN{FS=OFS="\t"} NF{print $1,$2; next}1' file 
0

を試してみてください。

awk '/^$/;/./{print $1"\t"$2}' file_a > file_b 

しかし、これは時に第一又は第二の柱のような特殊なケースでは動作しません。空であるか、列データにスペースが含まれています。正しく表形式のデータを処理するためには、このコマンドを使用します。

awk -F"\t" '/^$/;/./{print $1"\t"$2}' file_a > file_b 
+0

@EdMorton確かに想像しました。空行(^ $)に余分な、望ましくないタブがあります。このコマンドは、空の行をそのまま残します。列が1つしかない行があるかどうかについては何も言及していません(「最初の2つを選択する」とは、2つ以上あることを意味します)。 – steffen

+0

@エドモトンマン、これは純粋な仮定です。あなたはどちらも正確ではありません:私のように、あなたは列のスペースを期待していない、それは動作しません!さらに厳しい:空(空白)の第1列または第2列を期待しないでください。それは動作しません!漠然とした質問に対する不正確な答えです。申し訳ありませんが、私はあなたのコメントは適切だとは思わない。とにかく。私の編集を参照してください。とにかく@EdMorton – steffen

+0

私は最初の解決策を編集して、1行にゼロのタブがあるようにしました(それは今でも短くなっています:-P)。もう1つは追加されました。 – steffen

関連する問題