我是 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
选项指定文件要就地编辑。