我想在几个大文本文件中执行条件替换。结构是
1 ad sd bg we we A.2 890 3434 DATA
2 gf nh ok wa we A.1 890 3434 DATA
3 gf nh ok wa we A.1 890 3434
...
...
我想做,当第10列中存在值“DATA”时(并不总是发生),检查第7列的元素是否为A.1。在这种情况下,将其替换为 B.2
我尝试了混合的 see plus awk 方法,但无法完成,在 bash 中执行此操作的任何提示?
我想在几个大文本文件中执行条件替换。结构是
1 ad sd bg we we A.2 890 3434 DATA
2 gf nh ok wa we A.1 890 3434 DATA
3 gf nh ok wa we A.1 890 3434
...
...
我想做,当第10列中存在值“DATA”时(并不总是发生),检查第7列的元素是否为A.1。在这种情况下,将其替换为 B.2
我尝试了混合的 see plus awk 方法,但无法完成,在 bash 中执行此操作的任何提示?
awk '$10=="DATA"&&$7=="A.1"{$7="B.1"}1'
下面将找到同时包含“DATA”和“A.1”的行,并将“A.1”替换为“B.2”,并为您提供新的输出。
注意:以下命令不区分特定字段。只要“DATA”和“A.1”出现在同一行中,“A.1”就会更改为“B.2”。
sed -e '/A\.1.*DATA/!d;s/A\.1/B\.2/' /yourfile
要编辑文件并保留其他行,您可能需要尝试以下 bash 脚本。以下包含内联编辑。在测试任何东西之前,请备份您的文件。
#!/bin/bash
ORIG=$(sed -e '/A\.1.*DATA/!d' /yourfile)
NEW=$(sed -e '/A\.1.*DATA/!d;s/A\.1/B\.2/' /yourfile)
sed -i "s/${ORIG}/${NEW}/g" /yourfile
注意:对于 OS X 用户,您可能需要尝试以下操作。-i 开关在 OS X 上有所不同。(脚本确实包含内联编辑,因此在测试之前请备份您的文件。)
#!/bin/bash
ORIG=$(sed -e '/A\.1.*DATA/!d' /yourfile)
NEW=$(sed -e '/A\.1.*DATA/!d;s/A\.1/B\.2/' /yourfile)
sed -i '' "s/${ORIG}/${NEW}/g" /yourfile