#! /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
Run Code Online (Sandbox Code Playgroud)
该脚本与 1000 个 dat 文件一起位于一个文件夹中,每个文件有 50 行文本。
dat 文件称为1.dat
, 2.dat
,....,1000.dat
我的目的是制作文件l.txt
,其中l.txt
有 l 行1.dat
、 l 行2.dat
等。为此,我使用sed
命令来选择每个 dat 文件的 l 文件。
但是当我运行上面的脚本时,创建的txt里面什么都没有......
错误在哪里?
for LINE in {1..50}; do
for FILE in {1..1000}; do
sed -n "${LINE}p" "${FILE}.dat" >>"~/Escritorio/${LINE}.dat"
done
done
Run Code Online (Sandbox Code Playgroud)
在您的脚本中,您对 sed 表达式使用单引号,变量不会在单引号内扩展,您需要使用双引号。
还有一个带有 awk 的 liner 可以做同样的事情:
awk 'FNR<=50 {filename=sprintf("results/%d.dat", FNR); print >> filename; close(filename)}' *.dat
Run Code Online (Sandbox Code Playgroud)
只需创建结果目录,或者在命令中将其更改为另一个目录,~
不会扩展到家那里。
归档时间: |
|
查看次数: |
630 次 |
最近记录: |