求助 一个文档处理问题 合并文档类

sh/bash/dash/ksh/zsh等Shell脚本
回复
abbott
帖子: 435
注册时间: 2007-07-11 22:45

求助 一个文档处理问题 合并文档类

#1

帖子 abbott » 2009-09-15 16:36

有两个文档,
AbbNew.txt 每一行的字符用$i表示
FullName.txt 每一行的字符用$j表示
都是字符,

要求最后输出一个文档,具有这样的结构:
@string{$i = {$j}}


我是在建立自己的bibtex数据库,用到期刊的缩写名称对应关系...
t3swing
帖子: 1028
注册时间: 2008-11-01 21:42
来自: 树下板凳

Re: 求助 一个文档处理问题 合并文档类

#2

帖子 t3swing » 2009-09-15 16:55

贴一段出来吧 ,直观一点不容易理解错 ,lz的要求,我会考虑用excel搞定
民族的脊梁,是踏实做事的人,非只知道骂街的泼妇。
abbott
帖子: 435
注册时间: 2007-07-11 22:45

Re: 求助 一个文档处理问题 合并文档类

#3

帖子 abbott » 2009-09-15 17:05

AbbNew.txt 内容如下:
[abbott@master temp]$ head -15 AbbNew.txt
Acc. Chem. Res.
ACS Chem. Biol.
ACS Symp. Ser.
Acta Biochim. Pol.
Acta Chim. Slov.
Acta Crystallogr., Sect. A: Found. Crystallogr.
Acta Crystallogr., Sect. D: Biol. Crystallogr.
Acta Crystallogr., Sect. E: Struct. Rep. Online
Acta Crystallogr., Sect. F: Struct. Biol. Cryst. Commun.
Acta Mater.
Acta Pharm. (Zagreb, Croatia)
Acta Pharmacol. Sin.
Acta Phys. Pol. B Proc. Suppl.
Acta Phys. Pol., A
Acta Phys. Pol., B

FullName.txt如下(前15行)
[abbott@master temp]$ head -15 FullNames.txt
Accounts of Chemical Research
ACS Chemical Biology
ACS Symposium Series
Acta Biochimica Polonica
Acta Chimica Slovenica
Acta Crystallographica, Section A: Foundations of Crystallography
Acta Crystallographica, Section E: Structure Reports Online
Acta Crystallographica, Section F: Structural Biology and Crystallization
Acta Materialia
Acta Pharmaceutica (Zagreb, Croatia)
Acta Pharmacologica Sinica
Acta Physica Polonica B Proceedings Supplement
Acta Physica Polonica, A
Acta Physica Polonica, B
Acta Physiologica


原文数白行.....

最后的文档格式:
@string{Acc. Chem. Res. = {Accounts of Chemical Research}}
@string{ACS Chem. Biol. = {ACS Chemical Biology}}
......

由于太麻烦了,我之给出了最后结果的前两行......
t3swing
帖子: 1028
注册时间: 2008-11-01 21:42
来自: 树下板凳

Re: 求助 一个文档处理问题 合并文档类

#4

帖子 t3swing » 2009-09-16 9:55

应该有很简单的方法,期待高人给出,我使用的方法很直观,但显得罗嗦,能够处理

代码: 全选

#!/bin/bash
if [ $# -ne 2 ] ; then
        echo "输入两个文件以便处理!"
        exit 66
fi
line_a=$(wc -l $1 |grep -o "[0-9]*")
line_b=$(wc -l $2 |grep -o "[0-9]*")
echo "文件1行数:$line_a     文件2行数: $line_b"
if [ $line_a -gt $line_b ] ; then
        line=$line_b
else
        line=$line_a
fi
echo "合并行数:$line"

cat /dev/null > outfile.txt

for var in $(seq $line) ;do
        a=$(sed -n "${var}p" $1)
        b=$(sed -n "${var}p" $2)
        echo "@string{${a}={${b}}}" >>outfile.txt
done

exit 0
使用方法 XXX.sh AbbNew.txt FullName.txt
生成文件在outfile.txt(你先确保你文件下面没这个文件,否则删了不负责)
象这种整列文本处理用excel处理起来也很方便,我原来这么搞过
民族的脊梁,是踏实做事的人,非只知道骂街的泼妇。
头像
yaoms
帖子: 4952
注册时间: 2007-10-19 14:51
来自: 深圳

Re: 求助 一个文档处理问题 合并文档类

#5

帖子 yaoms » 2009-09-16 10:13

代码: 全选

awk 'NR==FNR{a[FNR]=$0} NR>FNR {print "@string{"a[FNR]" = {"$0"}}"}' AbbNew.txt FullNames.txt 
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'
abbott
帖子: 435
注册时间: 2007-07-11 22:45

Re: 求助 一个文档处理问题 合并文档类

#6

帖子 abbott » 2009-09-16 10:14

咱们的做法比较类似.....

#! /bin/bash

AbbFile=Abb_Z.txt
FullFill=FullName_Z.txt
lines=` cat $AbbFile | wc -l `
rm -fr /home/abbott/BibTex/temp/Result.txt

let i=1

for (( num=1; num<=$lines; num++ ))

do
AbbName=`sed -n "$num"p $AbbFile `
FullName=`sed -n "$num"p $FullFill `
let i=$i+1
echo @string{$AbbName = {$FullName}} >> Result.txt
done

处理结果还比较满意.....
目前没想到其他的方法.....

两个文档,在处理之前,我已经给搞成Line相同的了.....
abbott
帖子: 435
注册时间: 2007-07-11 22:45

Re: 求助 一个文档处理问题 合并文档类

#7

帖子 abbott » 2009-09-16 10:17

yaoms 写了:

代码: 全选

awk 'NR==FNR{a[FNR]=$0} NR>FNR {print "@string{"a[FNR]" = {"$0"}}"}' AbbNew.txt FullNames.txt 

这个太强了.....
t3swing
帖子: 1028
注册时间: 2008-11-01 21:42
来自: 树下板凳

Re: 求助 一个文档处理问题 合并文档类

#8

帖子 t3swing » 2009-09-16 10:23

文本处理这一块,只有更强,没有最好
学的东西多着呢 ,光grep sed awk3条命令就够学好久的
强大的awk
学习了
民族的脊梁,是踏实做事的人,非只知道骂街的泼妇。
cocoready
帖子: 15
注册时间: 2009-08-13 12:11

Re: 求助 一个文档处理问题 合并文档类

#9

帖子 cocoready » 2009-09-16 13:22

如果只是连接在一起,可以用pasted吧。
abbott
帖子: 435
注册时间: 2007-07-11 22:45

Re: 求助 一个文档处理问题 合并文档类

#10

帖子 abbott » 2009-09-16 13:31

paste 可能是我格式控制有问题,
不能保证要求的格式....
回复