awking txtファイルの列の問題

awking txtファイルの列の問題

以下のようにtxtファイル(input.txt)があります。

A_Karitiana-4.DG        Ignore_Karitiana(discovery).DG
A_French-4.DG   Ignore_French(discovery).DG
A_Dinka-4.DG    Dinka.DG
A_Dai-5.DG      Dai.DG
S_Dai-2.DG      Dai.DG
B_Dai-4.DG      Dai.DG
S_Dai-3.DG      Dai.DG
S_Dai-1.DG      Dai.DG

input.txtの最初の列のみを含む新しいtxtファイル(output.txt)を作成する必要があります。したがって、output.txtは次のようになります。

A_Karitiana-4.DG        
A_French-4.DG   
A_Dinka-4.DG    
A_Dai-5.DG      
S_Dai-2.DG      
B_Dai-4.DG      
S_Dai-3.DG      
S_Dai-1.DG      

私は次のコマンドを試しました。

awk '$1' input.txt > output.txt

これ:

awk -F' ' '$1' input.txt > output.txt

しかし、それらはすべてinput.txtと同じように見えるoutput.txtファイルを生成します。

区切り記号の問題のようですが、解決策がわかりません。

答え1

印刷しません。努力する

awk '{print $1}' input.txt > output.txt

(試した方法で)式を指定すると、awkデフォルトと少し似て動作しますgrep。一致する行はすべて正確に印刷されます。

  1. awk '/regexp/' file.txt- 正規表現に一致する行を印刷します。
  2. awk 'NR==3' file.txt- 3行印刷
  3. awk '1' file.txt- 1 が真のすべての行を印刷します。それがすべてです(わかりました、これはぎこちない猫ですが、私たちはあなたがやっていることに近づいています)。
  4. awk '$1' file.txt$1true と評価されるすべての行を印刷します。つまり、空ではありません(falseと評価されません(例: "0"))。つまり、ファイルが与えられたらすべての行を印刷します($1これは常に数値ではなく空でない文字列を含むため)。

答え2

awkスクリプトはpattern {action}ペアで構成されています。

  • 空の場合、すべてのレコードに適用されpatternます。{action}
  • 空の場合、一致するすべてのレコードに{action}デフォルト操作が{print}適用されます。pattern

awk '$1'{print}パターンを$1trueに適用するときのデフォルトの動作を評価します。空ではありません。ひもtrue の場合、ロケールの最初のフィールドがゼロと評価されるレコードを除いて、null 以外のすべてのレコードを印刷します。

代わりに申請したい場合いいえ-基本動作{print $1}-基本基本空モード:

awk '{print $1}' input.txt > output.txt

答え3

これは質問ですが、この特定の作業に対する良い選択肢としてここに提示しますawkcut

cut -d' ' -f1 input.txt > output.txt

デフォルトの区切り記号(タブ)が空白に変わり、-d' '最初のフィールドが選択されました-f1

関連情報