特定のファイルの一部の列を選択して、複数のファイルのデータを生成して構成したいと思います。ファイルが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
- フィールド区切り記号を使用し
cut
てpaste
決定します。-d
-f
抽出する列を選択cut
して-
ファイルの代わりに標準入力(つまり、後者のpaste
場合はパイプ)を使用することを示します。