如何根据一个字段中的值查找和替换另一字段中的值?

如何根据一个字段中的值查找和替换另一字段中的值?

我有一个这样的文件。

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')

该脚本将从文件中读取每一行,然后检查该行是否以给定字符串开头,如果是,则该行的所需部分将被替换字符串替换。

相关内容