同じ作業ディレクトリに同じ数の行(列の間に区切り文字を含む)を含み、最初の列の順序を共有する2つのリストがあります。以下は、8行を含む2つのテーブルの例です。
表 1.csv
lig10| -5.4600
lig13| -5.9900
lig14| -4.2200
lig15| -4.9200
lig3| -6.9700
lig4| -7.4000
lig5| -6.0000
lig9| -6.5700
表 2.csv
lig10| -5.2400
lig13| -6.6900
lig14| -4.4600
lig15| -4.9600
lig3| -6.9000
lig4| -6.3100
lig5| -3.7900
lig9| -6.5800
非常に似た形式のすべてのテーブルを大きなテーブルに並べてマージし、結果テーブルにマージされたファイルの数に比例して同じ数の行と列が含まれるようにすべてのデータをインポートしたいと思います。たとえば、10個の個々のテーブルの場合は20個の列になります(注:すべてのテーブルが同じであっても常に最初の列を使用します!)。結果表の各2番目の列にヘッダーを追加したい(初期表)、初期ファイル名に基づいています。これは2つのテーブルへの期待される出力です。
一部のLinuxユーティリティを使用して、1行のコマンドで端末のテーブルを融合できますか?
prog -i /workdir/*.csv -o resulting_table.csv
答え1
それがpaste
目的です。ただし、正しいファイル名を取得するには、いくつかのタスクを実行する必要があります。
$ ( printf '%s\t' *table*; echo; paste -d'\t' *table*)
name_of_file_with_table1 name_of_file_with_table2
lig10| -5.4600 lig10| -5.2400
lig13| -5.9900 lig13| -6.6900
lig14| -4.2200 lig14| -4.4600
lig15| -4.9200 lig15| -4.9600
lig3| -6.9700 lig3| -6.9000
lig4| -7.4000 lig4| -6.3100
lig5| -6.0000 lig5| -3.7900
lig9| -6.5700 lig9| -6.5800
最初のファイルの最初の列だけが必要な場合は、はるかに簡単です。
$ ( printf '%s ' *table*; echo; join *table* )
name_of_file_with_table1 name_of_file_with_table2
lig10| -5.4600 -5.2400
lig13| -5.9900 -6.6900
lig14| -4.2200 -4.4600
lig15| -4.9200 -4.9600
lig3| -6.9700 -6.9000
lig4| -7.4000 -6.3100
lig5| -6.0000 -3.7900
lig9| -6.5700 -6.5800
ファイルがソートされていない場合は、まずファイルをソートする必要があります。
for f in *table*; do sort "$f" > $f.sorted; done
それから:
( printf '%s ' *table*sorted; echo; join *table*sorted )