私のフォルダには「.txt」ファイルがたくさんあります。
各 .txt ファイルのファイル名の最初の 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
(ファイル名にバックスラッシュ、改行文字、または&
文字が含まれていないと仮定)。
私が好むのは、データがすべて完了したら、新しいファイルにデータを書き込んでから置き換えることです。みんな。これにより、中断されたプロセスを処理できます。しかし、それは私がここでやっていることではありません。