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
- 最初のライン処理後すぐに終了