shell学习——从文件中抽取字段

[ 1982 查看 / 6 回复 ]

有一个文件,如下,以空格分成3段(每段是7行),我现在想这样从里面抽取数据,如果某段中含有字段“REPORT COUNT= 22985”(如果含有的话,肯定是在这段的第6行中含有),则把这一段数据都放到一个新文件中,该如何实现呢?
有一个文件,如下,以空格分成3段(每段是7行),我现在想这样从里面抽取数据,如果某段中含有字段“REPORT COUNT= 22985”(如果含有的话,肯定是在这段的第6行中含有),则把这一段数据都放到一个新文件中,该如何实现呢??

代码:
YTCMSC01      AMA112 MAR07 15:19:01 2900 INFO LONG DURATION CALL
          ORIG= CDMA_CPS 000000
          TERM=
          CLG NO= 13355356234
          CLD NO=                              $
          CONNECT TIME= 066/1426170  REPORT COUNT= 22986
          ANSWERED= Y

YTCMSC01      AMA112 MAR07 15:19:01 2800 INFO LONG DURATION CALL
          ORIG= CKT    YTIGW1TRKE  477
          TERM= CKT    SB0014VOICE  121
          CLG NO= 13854829695
          CLD NO=                    13361321136
          CONNECT TIME= 066/1435147  REPORT COUNT= 22985
          ANSWERED= Y

YTCMSC01      AMA112 MAR07 15:19:01 2700 INFO LONG DURATION CALL
          ORIG= CDMA_CPS 000000
          TERM=
          CLG NO= 13356916813
          CLD NO=                              $
          CONNECT TIME= 066/0849074  REPORT COUNT= 22984
          ANSWERED= Y

解决办法:
1.grep 'REPORT COUNT= 22985' -B5 -C1 youfile >newfile
2.cat $scr_file|awk 'BEGIN{FS=" ";RS=""}{$0~/REPORT COUNT= 22985/ &print $0>'$dest_file'}'
3.awk 'BEGIN{RS=""}/REPORT COUNT= 22985/{print $0>"newfile"}' file
4.awk ' { for (i=7;i>0;i--){a=a[i-1]};a[1]=$0;if (a[2]~/REPORT COUNT= 22986/){for (i=7;i>0;i--){print a}}}' yourfile >newfile

最后编辑zhanchiaoxiang 最后编辑于 2009-11-19 16:07:04
TOP
凌阳教育嵌入式培训

如何删除最后一行

删除文件最后一行
1. tail -n 1 file
2. tail -1 filename
3. sed -n '$p' filename
4. "awk 'END {print}' file "

5.
ed file<$ d
.
w
!
6. sed -i '$d' file
TOP

删除文件的第n行和倒数第n行

1.
删除第三行,并把结果送至文件newfile
sed '3d' file>newfile
删除倒数第三行,把结果送至文件newfile
tac file|sed '3d'|tac >newfile
2.
FILENAME="test"
N=2
#删除第N行
sed ${N}'d'  ${FILENAME}
#删除倒数第N行
sed $(($(cat ${FILENAME}|wc -l)-${N}+1))'d'  ${FILENAME}
TOP

如何将文本倒置

将文本倒置,除了tac,还有其它办法,用vim,用awk,都可以实现 1.
line=$(awk 'END{print NR}' filename)
while((line!=0));do awk 'NR=='"$line"'' file;((line--));done
2.
vim -c "g/^/m 0|wq" file
3.
awk ' {line[NR] = $0}  END {for(i = NR; i > 0; i--) print line}'  filename
TOP

删除某目录下除某文件的所有文件

分删除单个文件和删除多个文件两种情况 1.单个文件的情况下
ls !(filename)|xargs rm
2.多个文件的情况下
ls !(filename1|filename2|...|filenamen)|xargs rm
TOP

字符排列变型

如由:
a1
a2
b1
b2
变为
a1 b1
a2 b2
cat filename
a1
a2
a3
b1
b2
b3
c1
c2
c3
变为
a1 b1 c1
a2 b2 c2
a3 b3 c3

1.cat filename|sort -nk 1.2 | xargs -n3
2.split -ls filename;ls x*|xargs -n3|while read i;do paste $i -d' ';echo +++++++++++;done;rm x*
TOP

嗯,支持
TOP