我想在几个大文本文件中执行条件替换。结构是
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
我尝试过混合看加上awk方法,但无法完成它,在bash中执行此操作的任何提示?
答案 0 :(得分:1)
awk '$10=="DATA"&&$7=="A.1"{$7="B.1"}1'
答案 1 :(得分:0)
以下将找到包含“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