ファイル名の最初の5文字を​​ファイルの各行に追加します。

ファイル名の最初の5文字を​​ファイルの各行に追加します。

私のフォルダには「.txt」ファイルがたくさんあります。

各 .t​​xt ファイルのファイル名の最初の 5 文字を取得し、ファイルの各行の先頭に追加する必要があります。また、新しいファイルの各行の先頭に「*」記号を追加する必要があります。

次のコマンドを試してみましたが、1行に1つの空白が複数あるファイルで誤った出力が発生しました。

awk 'FNR == 1 {chr =substr(FILENAME, 0,5); name = FILENAME ".new" }{ printf("%s %s\n", "*"chr$1, $2) >name}' *.txt 

誰かがコードを修正したり、これを行うより簡単な方法を提案できますか?

ベストアンサー1

シェルループを使用してファイルを繰り返します(シェルが${param:offset:length}ksh93の演算子をサポートしているとします)。

for f in *.txt
do
    sed -i -- "s/^/*${f:0:5} /" "$f"
done

(ファイル名にバックスラッシュ、改行文字、または&文字が含まれていないと仮定)。

私が好むのは、データがすべて完了したら、新しいファイルにデータを書き込んでから置き換えることです。みんな。これにより、中断されたプロセスを処理できます。しかし、それは私がここでやっていることではありません。

おすすめ記事