我在使用这个脚本时遇到了一些麻烦。
#!/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行(包含空格的字符串)命名。 感谢大家解决了问题。
答案 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 :(得分: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
两次,原始代码就是这样做的。实际上,它只会读取一次文件。