编辑:修复。现在关注优化代码。
我正在编写一个脚本,将数据从一个文件分成多个文件。当我运行脚本时,我收到错误:“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
答案 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))