在基于列的文本文件中查找并插入值

在基于列的文本文件中查找并插入值

我有一个恼人的问题。我有一些旧的文本文件,曾经从一个早已关闭的退休金融系统中导出。某些数据行已损坏,因此值出现在错误的列中。

例子:

123     99999 
123     87675 
65453   62 
123     64534

第一列中的值不应包含 5 个数字,第二列应始终包含 5 个数字。

到目前为止,我想出了一种找到有问题的线路的方法:

cat tempfile | grep -n '^[0-9][0-9][0-9][0-9][0-9]'

我想找到一种方法来找到有问题的行的行号,如上所述:

65463     62

....然后插入“123”和一个空格或制表符,使其看起来像,

123     65463     62 

如何以最简单的方式完成此操作,最好是在 Bash 中。

问候保罗

答案1

awk很适合这里

$ awk 'length($1)>3{$0 = "123\t" $0} 1' ip.txt
123     99999
123     87675
123     65453   62
123     64534
  • length($1)给出第一个字段的长度
  • $0 = "123\t" $0将根据需要更改该行的内容
  • 1打印内容的惯用方式$0

答案2

sed -r 's/^[0-9]{5}/123\t&/' yourfile

使用 的&特殊字符 to 来sed表示整个匹配的字符串。

使用sed -r可启用扩展正则表达式,特别是{ }本示例中的 。

相关内容