更新原始文本文件中的数据记录

时间:2013-01-31 02:41:43

标签: bash

我有一个只包含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

如何在脚本中实现此操作?任何提示或帮助都非常感激。 感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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