Unix dat文件读取脚本

Unix dat文件读取脚本,unix,awk,ksh,Unix,Awk,Ksh,我有一个包含1000行的dat文件,需要从每行中剪切几个字符,例如:-c900-903。如果提取的字符长度不是空白,则需要将整行打印到新的dat文件中。如何在unix脚本中执行此操作 我试过这个 while IFS=read -r line; do characters= cut -c900-903 if [ -n $characters ] then echo "$line" fi done < $inputfile > $output file. 而IFS=read-r行;做

我有一个包含1000行的dat文件,需要从每行中剪切几个字符,例如:-c900-903。如果提取的字符长度不是空白,则需要将整行打印到新的dat文件中。如何在unix脚本中执行此操作

我试过这个

while IFS=read -r line; do
characters= cut -c900-903
if [ -n $characters ]
then
echo "$line"
fi
done < $inputfile > $output file.
而IFS=read-r行;做
字符=切割-c900-903
如果[-n$个字符]
然后
回音“$line”
fi
完成<$inputfile>$output文件。

IFS=
之后,您需要一个空格。
为变量
字符
赋值时,应避免使用空格。
使用
characters=“cut-c900-903”
可以为字符分配文本,而不是子命令的结果。为此使用
$(命令)

cut
命令需要一些输入才能剪切,请使用
echo“${line}”

空格不是空的,
-n$characters
(应该是
-n“$characters”
避免错误,因为var是空的)在看到空格后会很高兴

while IFS= read -r line; do
   characters=$(echo "${line}"| cut -c900-903)
   if [ "${characters}" != "    " ]
   then
      echo "${line}"
   fi
done < $inputfile > $output_file

你的意思是当所有字符都是空白时,它们应该被删除吗?是要将整行打印到另一个文件中,还是只打印已提取的字符?请解释更多内容,并向我们展示一个输入/所需输出的示例。您是说要将所有具有最小长度的行移动到另一个文件中?为什么要移动,如果您还想删除长度小于10的所有行?如果提取的字符长度不是空格,则需要移动整行,我在下面的代码中尝试了IFS=read-r line;do characters=cut-c900-903如果[-n$characters],则回显“$line”fi done<$inputfile>$output file。但是上面的代码不起作用,它正在将提取的字符写入新文件..谢谢@沃尔特。修改过的代码对我有用。但是50000条记录大约需要10分钟,我有一个dat文件,大约有20万条(20万条)记录,大小为700MB。我需要通过Autosys作业运行此脚本,这反过来会在成功时触发另一个作业。。。有没有更快的方法来执行相同的场景以读取文件并获得如上所述的所需输出??我尝试了Awk,但出现了一个错误,说明记录太大,无法读取…(每条记录大约有5000个字符)…您是否尝试了
grep-vE
?只是从命令行开始,没有循环并将输出重定向到文件?或者先用
head-10${inputfile}grep..
测试较新的awk版本(nawk或更好的gawk),您没有recordlen限制。我尝试从命令行对输入文件运行grep,以将输出重新定向到新文件。但不起作用,得到一个错误为“无效选项-E”。。。grep-vE“^.{899}{4}”input\u file>output\u file,input\u file有25条记录。也许你可以试试
egrep-v“^.{899}{4}${inputfile}
或者试试
sed'/^.{899\}{4\}/d'${inputfile
grep -vE "^.{899} {4}" ${inputfile}