awk、grep、またはsedコマンドを使用してLinuxでファイルの一部を別々のファイルに抽出する方法

awk、grep、またはsedコマンドを使用してLinuxでファイルの一部を別々のファイルに抽出する方法

次のテキストファイルがあります。

入力ファイル1.txt

.......................
cha21   1       3       5       nar
cha21   2       3       6       piy
cha23   2       3       5       ram
cha23   3       3       3       dam
cha27   5       3       7       pam
................................

「cha21」、「cha23」、および「cha27」行に対応する5つの列をすべて3つの異なる出力ファイル(例:cha21.txt、cha23.txt、cha27.txt)に抽出したいと思います。

結果ファイル

cha21.txt

..........
cha21   1       3       5       nar
cha21   2       3       6       piy
......................

cha23.txt

cha23   2       3       5       ram
cha23   3       3       3       dam
...................................

cha27.txt

cha27   5       3       7       pam
...........................

3つのファイルに対してgrepコマンドでこれを3回実行できます。つまり、1つのコマンドで実行できます。

答え1

頑張ります

awk '{print >> $1 ".txt" ;}' 

どこ

  • print行全体を印刷します。
  • >> $1 ."txt"この行を$ 1とマークされたファイルに書き込み(追加).txtします。

編集する:

行、ドットのある行などをコメントアウトした場合

努力する

awk '$1 ~ /cha/ {print >> $1 ".txt" ;}' 

"cha"で始まるファイルだけが埋められます。

答え2

それは簡単ですawk

awk '{print $0 >> $1".txt"}' file1.txt

関連情報