Forループは他のループ内では機能しません。

Forループは他のループ内では機能しません。
#! /bin/bash
for (( l = 1 ; l <= 50; ++l )) ; do
       for (( k = 1 ; k <= 1000; ++k )) ; do
       sed -n '$l,$lp' $k.dat >> ~/Escritorio/$l.txt
       done
done

スクリプトは、それぞれ50行のテキストで構成される1000個のdatファイルを含むフォルダにあります。

dat ファイル名1.dat, 2.dat,....,1000.dat

私の目的は、l行、l行などl.txtでファイルを作成することです。これを行うには、コマンドを使用して各datファイルに対してlファイルを選択します。l.txt1.dat2.datsed

しかし、上記のスクリプトを実行すると、生成されたtxtには何も表示されません...

エラーはどこにありますか?

ベストアンサー1

for LINE in {1..50}; do
    for FILE in {1..1000}; do
        sed -n "${LINE}p" "${FILE}.dat" >>"~/Escritorio/${LINE}.dat"
    done
done

スクリプトはsed式に一重引用符を使用しており、変数は一重引用符内で拡張されないため、二重引用符を使用する必要があります。

同じことを行うawkを含む単一のライナーもあります。

awk 'FNR<=50 {filename=sprintf("results/%d.dat", FNR); print >> filename; close(filename)}' *.dat

~ホームディレクトリに展開せずに結果ディレクトリを作成するか、コマンドから別のディレクトリに変更します。

おすすめ記事