以下のように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
。一致する行はすべて正確に印刷されます。
awk '/regexp/' file.txt
- 正規表現に一致する行を印刷します。awk 'NR==3' file.txt
- 3行印刷awk '1' file.txt
- 1 が真のすべての行を印刷します。それがすべてです(わかりました、これはぎこちない猫ですが、私たちはあなたがやっていることに近づいています)。awk '$1' file.txt
–$1
true と評価されるすべての行を印刷します。つまり、空ではありません(falseと評価されません(例: "0"))。つまり、ファイルが与えられたらすべての行を印刷します($1
これは常に数値ではなく空でない文字列を含むため)。
答え2
awkスクリプトはpattern {action}
ペアで構成されています。
- 空の場合、すべてのレコードに適用され
pattern
ます。{action}
- 空の場合、一致するすべてのレコードに
{action}
デフォルト操作が{print}
適用されます。pattern
awk '$1'
{print}
パターンを$1
trueに適用するときのデフォルトの動作を評価します。空ではありません。ひもtrue の場合、ロケールの最初のフィールドがゼロと評価されるレコードを除いて、null 以外のすべてのレコードを印刷します。
代わりに申請したい場合いいえ-基本動作{print $1}
-基本基本空モード:
awk '{print $1}' input.txt > output.txt
答え3
これは質問ですが、この特定の作業に対する良い選択肢としてここに提示しますawk
。cut
cut -d' ' -f1 input.txt > output.txt
デフォルトの区切り記号(タブ)が空白に変わり、-d' '
最初のフィールドが選択されました-f1
。