查找第 4 列中出现的所有字符串,并用特定文本替换第 7 列 - bash

查找第 4 列中出现的所有字符串,并用特定文本替换第 7 列 - bash

我是 Bash 脚本的新手,无法找到问题的解决方案。我有一个字符串列表,类似于 input.txt 文件中的字符串,以换行符分隔:

TATAMOTORS
TCS
RELIANCE
MARUTI

我有另一个文件 target.txt,其中包含 1000 多行 csv 格式的内容,其格式如下:

124,1940000,792,TATAMOTORS,172.1.1.21,mode1,12:00:00,1,21,0,23,23,014,1000,alive,1,17,23

我想将第 4 列(此处为 TATAMOTORS)与 input.txt 文件中的任何行匹配的所有行中的字段号 7 中的时间替换为 24:00:00。

我可以用简单的 bash 命令/脚本来完成这个吗?

答案1

您可以使用简单的 Awk 命令/脚本来完成此操作:

awk -F, '
  BEGIN{OFS=FS} 
  NR==FNR {a[$1]++; next} 
  $4 in a {$7 = "24:00:00"}
  1
' input.txt target.txt

答案2

使用 bash 和 sed 的另一种方法:

while read token; do
   sed -i "/$token/{s/,[^,]*/,24:00:00/6}" target.txt
done < input.txt

该脚本input.txt逐行读取并将行值放入token变量中。

sed仅对包含 的行执行替换正则表达式的第 6 个匹配项$token

-i选项指定文件要就地编辑。

相关内容