获取错误:sed:-e expression#1,char 2:unknown命令:`。'

时间:2013-06-04 17:48:32

标签: bash shell sed

编辑:修复。现在关注优化代码。

我正在编写一个脚本,将数据从一个文件分成多个文件。当我运行脚本时,我收到错误:“sed:-e expression#1,char 2:unknown command:`。'”没有任何行号,这使得调试有点困难。我已经检查了我单独使用sed的行,它们的工作没有问题。有任何想法吗?我意识到有很多事情我做了一些非常规的事情,并且有更快的方式做某些事情(我确信有一种方法可以避免不断导入某些文件),但是现在我只是想了解这一点错误。这是代码:

x1=$(sed -n '1p' < somefile | cut -f1)
y1=$(sed -n '1p' < somefile | cut -f2)
p='p'
for i in 1..$(seq 1 $(cat "somefile" | wc -l)) 
do
  x2=$(sed -n $i$p < somefile | cut -f1)
  y2=$(sed -n $i$p < somefile | cut -f1)
  if [ "$x1" = "$x2" ] && [ "$y1" = "$y2" ];
  then
    x1=$x2
    y1=$x2
  fi
  s="$(sed -n $i$p < somefile | cut -f3) $(sed -n $i$p < somefile | cut$
  echo $s >> "$x1-$y1.txt"
done

2 个答案:

答案 0 :(得分:1)

这是问题的原因:

for i in 1..$(seq 1 $(cat "somefile" | wc -l))

尝试

for i in $(seq 1 $(wc -l < somefile))

但是,您正在使用所有这些sed命令多次,多次读取文件。只阅读一次:

read x1 y1 < <(sed 1q somefile)
while read x2 y2 f3 f4; do
    if [[ $x1 = $x2 && $y1 = $y2 ]]; then
        x1=$x2
        y1=$x2
    fi
    echo "$f3 $f4"
done < somefile > "$x1-$y1.txt"

构造s变量的行被截断 - 我假设每行有4个字段。

注意:剪切和粘贴编码的一个问题是您引入了错误:您为y2指定了与x2相同的字段

答案 1 :(得分:1)

问题出在以下几行:

for i in 1..$(seq 1 $(cat "somefile" | wc -l)) 

如果somefile有3行,则会产生以下i的值:

1..1
2
3

显然,sed -n 1..1p < filename之类的内容会导致您观察到的错误:sed: -e expression #1, char 2: unknown command: '.'

你更想要:

for i in $(seq 1 $(cat "somefile" | wc -l))