ファイル名を持つ新しい列に出力を追加する方法

ファイル名を持つ新しい列に出力を追加する方法

1つの出力に各ファイルの出力を徐々に追加するには?すべてのファイルに対して貼り付けコマンドを一緒に実行せずにこれを実行したいと思います。 10,000個のファイルがあり、各ファイルのサイズは100GBです。

ファイル1

a       1
b       2
c       3

ファイル2

a       10
b       20
c       40

ファイル3

a       0
b       0
c       0

希望の出力

file1   file1   file2   file2   file3   file3
a       1       a       10      a       0
b       2       b       20      b       0
c       3       c       40      c       0

必要な出力に似たものを得ることができることを知っていますが、paste -d "\t" file{1..3}タスクを1つずつ実行したいのですが、すべて一緒に実行するわけではなく、重要なのはファイル名を保存したいと思います。

答え1

pasteファイル行だけをマージする必要がある場合は、コマンドが良い選択です。

プレフィックスヘッダー行とファイル名の使用の組み合わせアッ+生地:

{ for f in file*; do awk '{ for(i=1;i<=NF;i++) printf("%s\t",FILENAME); exit }' "$f"; done; 
echo ""; paste -d"\t" file*; } | column -t

出力(3つの入力ファイル用):

file1  file1  file2  file2  file3  file3
a      1      a      10     a      0
b      2      b      20     b      0
c      3      c      40     c      0

詳細:

  • { command; command; ...}- 複数のコマンドの出力を結合するために使用されます。

  • for f in file*;- 各ファイルについて

  • printf("%s\t",FILENAME)- そのファイルの各列のファイル名を出力

  • exit- 最初のライン処理後すぐに終了

関連情報