#! /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.dat
等sed
。
但是當我運行上面的腳本時,創建的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