0

我有一个仅包含 10 条记录的原始文本文件。

1|word01
2|word02
3|word03
4|word04
5|word05
6|word06
7|word07
8|word08
9|word09
10|word10

如果添加一条显然不存在的新记录“word11”,它将保持在顶部,并且所有行都将被重新索引。由于该文件应仅存储 10 条记录,因此将删除最后一条。输出如下:

1|word11
2|word01
3|word02
4|word03
5|word04
6|word05
7|word06
8|word07
9|word08
10|word09

如果添加一个已经存在的新记录,那么它应该被排序到顶部并重新索引所有。

1|word04
2|word11
3|word01
4|word02
5|word03
6|word05
7|word06
8|word07
9|word08
10|word09

如何在脚本中实现这种操作?任何提示或帮助真的很感激。谢谢。

4

2 回答 2

0
#!/bin/sh

usage ()
{
  echo usage: $0 RECORD FILE
  exit
}

[ $2 ] || usage
record=1
# print new record
echo "$record|$1" > k

# print other records
while IFS='|' read index value
do
  if [ ${value%$1} ]
  then
    (( record++ ))
    echo "$record|$value" >> k
  fi
done < "$2"

# trim to 10
head k > "$2"
rm k
于 2013-01-31T03:01:57.373 回答
0
#!/bin/bash
# command usage: cmd FILENAME NEWWORD
sed -i -e 's/[0-9]\+|\(.\+\)/\1/g' -e "/$2/d" $1
echo $2 > $1.tmp
cat $1 >> $1.tmp
nl -s '|' $1.tmp | head -10 | tr -d '[:blank:]' > $1
于 2013-01-31T03:30:26.060 回答