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.dat等。为此,我使用sed命令选择每个 dat 文件的 l 文件。

但是当我运行上面的脚本时,创建的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

相关内容