フォルダ(データ)に多数のテキストファイルが含まれています。各テキストファイルには1列の数字が含まれ、その列には30個の数字が含まれます。これらのテキストファイルの列を組み合わせたテーブルを作成したいと思います。次のコマンドを使用しました。
cd data
paste *.txt > all_data.txt
出力は次のとおりです。
0.834679 0.612341 0.510057 0.580128 .....
1.837894 1.061547 0.961449 1.343096 .....
1.638215 1.024628 1.113596 1.80506 .....
1.596119 0.971842 1.14204 1.73881 .....
1.568142 1.025716 1.217219 1.769668 .....
1.554016 0.977165 1.226769 1.786335 .....
1.543137 1.001812 1.247598 1.840443 .....
1.491823 0.99437 1.28337 1.784271 .....
1.371208 0.931998 1.259749 1.717408 .....
1.390867 0.905996 1.300722 1.739213 .....
1.35813 0.283377 1.307122 1.733058 .....
......
このコマンドは、1つの大きなスプレッドシートのすべての列を結合しました。私の質問:テキストファイルの各列を貼り付けて、その列にテキストファイル名のヘッダーを作成する方法はありますか?次のように:
text_file1 text_file2 text_file3 text_file4 ....
0.834679 0.612341 0.510057 0.580128 .....
1.837894 1.061547 0.961449 1.343096 .....
1.638215 1.024628 1.113596 1.80506 .....
1.596119 0.971842 1.14204 1.73881 .....
1.568142 1.025716 1.217219 1.769668 .....
1.554016 0.977165 1.226769 1.786335 .....
1.543137 1.001812 1.247598 1.840443 .....
1.491823 0.99437 1.28337 1.784271 .....
1.371208 0.931998 1.259749 1.717408 .....
1.390867 0.905996 1.300722 1.739213 .....
1.35813 0.283377 1.307122 1.733058 .....
......
できるよ:
paste_with_header() (
IFS=$(printf '\t') # or IFS=$'\t' with some shells
printf '%s\n' "$*"
paste -- "$@"
)
paste_with_header text_file* > all_data.txt
"$*"
最初の文字と結合位置パラメータ(関数の引数)のリストに展開され$IFS
、我々はに設定され、TAB
文字paste
もファイルの行を結合するために使用しています。
ヘッダーのファイル拡張子を削除するには、次のようにしますzsh
。
paste_with_header() (
printf '%s\n' ${(pj:\t:)@:r}
paste -- "$@"
)
${@:r}
各定位置パラメーターのルート名(拡張子が削除されている)に展開されます。j:\t:
参加するパラメータ拡張フラグ\t
。p
その\t
Aとして解釈されますTAB
またはksh93
、を使用するzsh
かbash
、ファイルに拡張子が付いているか、パスコンポーネント内のディレクトリにドットが含まれていないと仮定します。
paste_with_header() (
IFS=$'\t'
printf '%s\n' "${@%.*}"
paste -- "$@"
)
${@%.*}
.*
各位置パラメータの終わりに一致する最短の末尾部分を削除します(にfoo.txt
なりますが、空の文字列になることにfoo
注意してください./foo
)。
(これらは明らかに、ファイル名に表や改行文字が含まれていないことを前提としています)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加