在Unix Shell脚本中第二次出现字符串后如何替换某些行

时间:2018-07-18 14:49:16

标签: unix replace

输入文本文件:

COMMENT 'Sample Table'
ROW FORMAT DELIMITED
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'xxxxxxx'
ROW FORMAT DELIMITED
STORED AS INPUTFORMAT
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
  'xxxx'

所需的输出:

COMMENT 'Sample Table'
ROW FORMAT DELIMITED
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'xxxxxxx'
ROW FORMAT DELIMITED
STORED AS ORC
LOCATION
  'xxxx'

第二次出现“ STORED AS”之后,下一个单词应为ORC,并应删除下三行。在Unix中可以使用什么命令?

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案。如果输入保存在文件sample.txt中 以下命令给出了预期的输出。

awk'/ STORED AS INPUTFORMAT / {c ++; if(c == 2){sub(“ STORED AS INPUTFORMAT”,“ STORED AS ORC \ nzzzz”); c = 0}} 1'sample.txt | sed -e'/ zzzz /,+ 3d'