我有一个包含 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=
之后,你需要一个空格。
当你给变量characters
赋值时,你应该避免空格。
使用 characters="cut -c900-903"
,您将为字符分配文本,而不是子命令的结果。为此使用$(command)
。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
对于大文件,由于每个循环中需要加载子命令,这将变得非常慢。您可以尝试其他工具,例如 awk
、grep
或 sed
。是否为您执行以下操作:
grep -vE "^.{899} {4}" ${inputfile}