我有一个这样的文件。
IMS00|20140101|Unix|Jan14
IMS01|20140201|Unix|Feb14
IMS02|20140301|Unix|Mar14
IMS03|20140101|Unix|Jan14
IMS04|20140201|Unix|Feb14
我的标准是,如果第 1 列的值为IMS00
,则应将第 4 列的值Jan14
替换为 ,Jan15
如果第 1 列的值为IMS01
,则应将第 4 列的值Feb14
替换为Feb15
。
如何才能做到这一点?
答案1
您的问题不是很清楚,例如在您编写的代码中IMS00
,稍后将其称为IMS.00
, 带点。另外,更改的列数应该是可能4
,而不是3
。无论如何,您可能正在寻找
awk 'BEGIN{FS=OFS="|"}$1=="IMS00"{$4="Jan15"}$1=="IMS01"{$4="Feb15"}1' file
该BEGIN
块仅在最开始执行一次,并将字段分隔符FS
和输出字段分隔符设置OFS
为|
。最终1
只是打印所有内容。
答案2
你可以在 Perl 中这样做:
perl -pe 's/^(IMS00\|.*\|).*/$1Jan15/; s/^(IMS01\|.*\|).*/$1Feb15/;' file
答案3
这是一个Python解决方案:
#!/usr/bin/env python2
with open('file.txt') as f:
for line in f:
if line.startswith('IMS00'):
print line.replace('Jan14', 'Jan15')
elif line.startswith('IMS01'):
print line.replace('Feb14', 'Feb15')
该脚本将从文件中读取每一行,然后检查该行是否以给定字符串开头,如果是,则该行的所需部分将被替换字符串替换。