Bash-script不起作用,用sed的输出初始化变量(字符串)

时间:2018-05-16 13:37:02

标签: bash sed

我在使用这个脚本时遇到了一些麻烦。

#!/bin/bash

i=1
for i in $(cat rows.txt);
do
        j = "$(sed -ne "$[i-1]p" LOB_final.html)"
        echo $j
        sed -ne "$[i-1],$[i+4]p" LOB_final.html >> ./cards/$j.txt
done;

我有一个包含正确行号的其他文件(不完全是,[row-1]是相关行)。此行包含一个包含空格的字符串,应该是文件的名称。

脚本按预期工作,但初始化j不起作用。

有人有小费吗?

谢谢。

编辑:目标是在文件中写入任意六行(在给定行之前1和之后4行)。该文件应以给定行的前1行(包含空格的字符串)命名。 感谢大家解决了问题。

2 个答案:

答案 0 :(得分:0)

检查一下,修复了你脚本的一些问题

#!/bin/bash

i=1
for i in $(cat rows.txt); 
do
        j="$(sed -ne "$((i-1))p" LOB_final.html)"
        echo "$j"
        sed -ne "$((i-1)),$((i+4))p" LOB_final.html >> ./cards/"$j".txt
done;
  1. 删除了分配j
  2. 的空间
  3. $ [var]替换为$((var))
  4. 双引号中的扩展变量

答案 1 :(得分:0)

您似乎想要从行i-1获取文件名,然后将该行与接下来的五行一起存储在具有该名称的文件中。

使用awk

awk 'NR == FNR       { rows[$0]; next }
     FNR + 1 in rows { name = sprintf("./cards/%s.txt", $0); left = 6 }
     left > 0        { print >name; --left }' rows.txt LOB_final.html

已对某些玩具数据进行了测试,但由于我不知道您的数据是什么样的,因此我无法确定它是否可以在没有(次要)修改的情况下运行。

它的好处是它不会为从LOB_final.html读取的每个行号解析整个rows.txt 两次,原始代码就是这样做的。实际上,它只会读取一次文件。