別のファイルから特定の列を選択、コピー、貼り付け、その列から1つのファイルを作成する方法は?

別のファイルから特定の列を選択、コピー、貼り付け、その列から1つのファイルを作成する方法は?

特定のファイルの一部の列を選択して、複数のファイルのデータを生成して構成したいと思います。ファイルが10個を超える場合、各ファイルの2番目、3番目、4番目の列をコピーして1つのファイルに貼り付ける必要があります。

答え1

これも簡単に行えますawk

$ awk '{print $2,$3,$4}' *.txt > collapsed_output.txt

はい

以下は、いくつかのサンプルデータです。

$ seq 20 | paste - - - - - > sample.txt

この行は次のとおりです。

$ head sample.txt 
1   2   3   4   5
6   7   8   9   10
11  12  13  14  15
16  17  18  19  20

これで10個のコピーを作成します。

$ seq 10 | xargs -I{} cp sample.txt sample{}.txt

次のファイルがあります。

$ tree
.
|-- sample10.txt
|-- sample1.txt
|-- sample2.txt
|-- sample3.txt
|-- sample4.txt
|-- sample5.txt
|-- sample6.txt
|-- sample7.txt
|-- sample8.txt
|-- sample9.txt
`-- sample.txt

これでコマンドを実行すると、次のようになりますawk

$ awk '{print $2, $3, $4}' sample{1..10}.txt | column -t
2   3   4
7   8   9
12  13  14
17  18  19
2   3   4
7   8   9
12  13  14
17  18  19
2   3   4
7   8   9
12  13  14
17  18  19
...

sample01.txtここでは、最初の3つのファイル(...)の出力を示していますsample03.txt。また、このコマンドを使用して出力形式を指定しますcolumn -tが、これは表示目的でのみ使用され、U&Lで出力を表示しやすくなります。

追加の書式設定はコマンドで簡単に実行できますが、awkこれは質問の範囲外であるようです。

答え2

見てコマンドラインユーティリティが呼び出されます。cut。一意の区切り文字で区切られた列を抽出できます。使用可能な部品を再組み立てしてください。paste

たとえば、一般的なカンマ区切り形式がある場合

$ cat debts.csv
Name,Age,Debt
Alice,20,1337
Bob,30,42

$ cat pets.csv
Name,Pet
Alice,Dog
Bob,Cat

名前と負債を抽出できます。

$ cut -d, -f1,3 debts.csv
Name,Debt
Alice,1337
Bob,42

負債とペットを組み合わせる

$ cut -d, -f2 pets.csv | paste -d, debts.csv -
Name,Age,Debt,Pet
Alice,20,1337,Dog
Bob,30,42,Cat
  • フィールド区切り記号を使用しcutpaste決定します。-d
  • -f抽出する列を選択cutして
  • -ファイルの代わりに標準入力(つまり、後者のpaste場合はパイプ)を使用することを示します。

関連情報