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

該腳本位於一個資料夾中,其中包含 1000 個 dat 文件,每個文件有 50 行文字。

dat 檔名為1.dat, 2.dat,....,1000.dat

我的目的是建立文件l.txt,其中l.txt有 l 行1.dat、l 行2.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

只需建立結果目錄,或在命令中將其變更為另一個目錄,~不會擴展到那裡的主目錄。

答案2

這個 awk 指令怎麼樣?嘗試使用一組 dat 文件

awk '{file=FNR".txt"; print $0 > file}' *.dat

相關內容