【发布时间】:2015-09-30 21:38:57
【问题描述】:
我有 2 个 dat 文件,FILE1 和 FILE2。第一个有(例如)1000 行,第二个有 100 行。两个文件中的行具有相同的格式,即 5 个数字,以空格分隔。 FILE2 值的行部分匹配 FILE1 中的行。比如FILE2中有一行是:
1 2 3 4 5
FILE1中有一行是:
1 2 3 9 5
始终是第 4 个值不匹配。第 1、第 2、第 3 和第 5 个值始终匹配。我想在 bash 脚本中执行此操作。到目前为止,我已经启动了这个脚本。
#! /bin/bash
#USAGE: sh ./script.sh test.dat check.dat
TEST_FILE=$1
CHECK_FILE=$2
## for each line in TEST_FILE
while read line ; do
arr=$(echo $line | tr " " "\n")
part_match=$(echo ${arr:0:8})
X=$(grep "$part_match" ${CHECK_FILE})
## So up to here, if the partial match exists in FILE2, I save the line in X.
## Then I try to substitute them with awk or sed but none of them works.
awk '{gsub(/${X}/, "${line}")}' check.dat > check_new.dat
## OR
sed -i "s/$X/$line/pw" check.dat
done < ${TEST_FILE}
它们都不起作用。我究竟做错了什么?非常感谢!
【问题讨论】:
-
第 5 个值如何匹配,5 == 6?另外,“我想要这个”是什么意思?