23,121
社区成员
发帖
与我相关
我的任务
分享
done < `echo ${list}` #改成这样 done <<< 'echo ${list}'
[/quote]
不知道为什么会有问题,不过我写回文件,又用<这个成功了,谢谢
#读取文件长度最长的前100行,然后让用户输入删除的行数进行删除
#!/bin/bash
#定义一个表示要输出行数的变量,比如N=100
N=5;
filecontent='';
linecount='';
splite='-';
content=`cat file2read.txt`;
while read line
do
filecontent=${filecontent}${line}${splite};
linecount=${linecount}${#line}${splite};
done<<<"${content}"
#去掉最后一个分隔符
filecontent=${filecontent%?};
linecount=${linecount%?};
#将字符串分隔为数组
OLD_IFS="$IFS";
IFS="-";
file=($filecontent);
count=($linecount);
temp=($linecount)
IFS="$OLD_IFS";
#输出数组最大的前N(N=5)个元素
#sort it first
for (( i=0 ; i<${#temp[@]} ; i++ ))
do
for (( j=${#temp[@]} - 1 ; j>i ; j-- ))
do
if [[ ${temp[j]} -gt ${temp[j-1]} ]]
then
t=${temp[j]}
temp[j]=${temp[j-1]}
temp[j-1]=$t
fi
done
done
#按从大到小顺序输出长度最长的前N行
for ((i=0;i<$N;i++))
do
for ((j=0;j<${#count[@]};))
do
if [[ ${count[j]} -eq ${temp[i]} ]]
then
echo ${file[j]}
break;
else
j=$[$j+1]
fi
done
done
#处理用户输入
echo -n "请输入要删除的行:"
read num
echo $num
num=$[$num-1]
for (( j=0;j<${#count[@]};))
do
if [[ ${count[j]} -eq ${temp[num]} ]]
then
unset file[j]
break;
else
j=$[$j+1]
fi
done
#数据写回文件
>file2read.txt
for (( j=0;j<${#file[@]};j++))
do
if [[ ${#file[j]} -gt 0 ]]
then
echo ${file[j]}>>file2read.txt
fi
done
done < `echo ${list}` #改成这样 done <<< 'echo ${list}'