shell中文本文件的处理(1)
时间:2007-05-16 来源:zhouliming9
文件处理,一般都是批量处理,在shell程序的时候文本处理时比不可少的,可以节省很多的时间,今天正好有空,将一些以前用过的东西整理一下:
现在有两个文件
a.txt:
1111
2222
3333
b.txt
aaa bbb ccc
abc anv sss
ddd fff ggg
一、如果要处理成:
1111 aaa bbb ccc
2222 abc anv sss
3333 ddd fff ggg
可采用两种方法:
1. 使用paste
paste a.txt b.txt
2.使用awk
cat a.txt | grep -v '^#' | while read line
do
aa=`echo $line | awk '{print $1}'`
cat b.txt | grep -v '^#' | while read line
do
dd=`echo $line | awk '{print $1 " "$2" "$3}'`
echo $aa$dd done done 二、如果要处理成: 1111/aaa bbb ccc 2222/abc anv sss 3333/ddd fff ggg
可以用用: paste -d"/" a.txt b.txt 或者:cat a b 1>c|awk 'BEGIN{for (i=1;i<=4;i++)printf "sed -n '\''%sp'\'' c \nsed -n '\''%sp'\'' c\n",i,i+4}'|sh|sed 'N;s/\n/\\/' 或者: cat a.txt | grep -v '^#' | while read line
do
aa=`echo $line | awk '{print $1}'`
cat b.txt | grep -v '^#' | while read line
do
dd=`echo $line | awk '{print $1" " $2" "$3}'`
echo $aa"/"$dd
done
done 三、当然如果要把b文件变成三行合并成一行并且以/作为每行的分隔符就可以用: 即: 1111 aaa bbb ccc\2222 abc anv sss\3333 ddd fff ggg
可用:paste -d"/" -s b.txt 四、如果一个文件有多行 有唯一关键字,想定位本关键字所在行,并且打印出以后的n(数字)行,可如下操作:如a.txt的一部分如下: gg1gg1g sssssss hshshhs hshsh1222s ssnininin shshsh99999 需要得到sssssss行以及该行以下的4行 dd=a.txt
TMP1=`awk '/sssssss/ {print NR}' $dd`
TMP2=`awk '/sssssss/ {print NR+4}' $dd`
sed -n ${TMP1},${TMP2}p $RUNTXT>abc.txt 今天就写这些了,以后再整理加上来
do
aa=`echo $line | awk '{print $1}'`
cat b.txt | grep -v '^#' | while read line
do
dd=`echo $line | awk '{print $1 " "$2" "$3}'`
echo $aa$dd done done 二、如果要处理成: 1111/aaa bbb ccc 2222/abc anv sss 3333/ddd fff ggg
可以用用: paste -d"/" a.txt b.txt 或者:cat a b 1>c|awk 'BEGIN{for (i=1;i<=4;i++)printf "sed -n '\''%sp'\'' c \nsed -n '\''%sp'\'' c\n",i,i+4}'|sh|sed 'N;s/\n/\\/' 或者: cat a.txt | grep -v '^#' | while read line
do
aa=`echo $line | awk '{print $1}'`
cat b.txt | grep -v '^#' | while read line
do
dd=`echo $line | awk '{print $1" " $2" "$3}'`
echo $aa"/"$dd
done
done 三、当然如果要把b文件变成三行合并成一行并且以/作为每行的分隔符就可以用: 即: 1111 aaa bbb ccc\2222 abc anv sss\3333 ddd fff ggg
可用:paste -d"/" -s b.txt 四、如果一个文件有多行 有唯一关键字,想定位本关键字所在行,并且打印出以后的n(数字)行,可如下操作:如a.txt的一部分如下: gg1gg1g sssssss hshshhs hshsh1222s ssnininin shshsh99999 需要得到sssssss行以及该行以下的4行 dd=a.txt
TMP1=`awk '/sssssss/ {print NR}' $dd`
TMP2=`awk '/sssssss/ {print NR+4}' $dd`
sed -n ${TMP1},${TMP2}p $RUNTXT>abc.txt 今天就写这些了,以后再整理加上来
相关阅读 更多 +