将注释(插入“;”作为第一个字符)应用于第二个文件

时间:2012-04-02 23:06:01

标签: shell sed awk

对于这里的一些专家来说这一定很容易 - 我无法弄清楚:

File1:  
0000001 test1  
;0000002 test2  
;0000003 test3  
0000005 test5  
;00000006 test6  

File2:  
000001 test1  
000002 test2  
000003 test3  
000004 test4  
000005 test5  
000006 test6  
000007 test7  

输出应为:

000001 test1  
;000002 test2  
;000003 test3  
000004 test4  
000005 test5  
;000006 test6  
000007 test7  

注意: - 两个文件都已排序;
        - 输出文件应与File2具有相同的行数,并带有“;”从File1复制的char。

非常有责任

3 个答案:

答案 0 :(得分:2)

这就是诀窍:

#!/bin/sh
while read f2line
do
    # strip just the test id (chars after the space)
    testId=`echo $f2line | awk '{print $2}'`
    # If file1 has a line for the test starting with a ';'  then prefix the line
    # from file2 with a ';', else just print the line from file2
    grep -q ";[1234567890]\+ $testId" file1
    if [ $? = 0 ] ; then
       echo ";$f2line"
    else
        echo $f2line
    fi
done < file2

答案 1 :(得分:2)

未测试:

awk '
  NR==FNR {if ($0 ~ /^;/) comment[substr($1,2)+0] = 1; next}
  ($1+0) in comment {print ";" $0; next}
  {print}
' file1 file2

使用“+0”将“0001”转换为“1”,因为第一个字段在两个文件中具有不同数量的0。

答案 2 :(得分:1)

这可能适合你(GNU sed):

sed '/^;0*\(......\) .*/!d;s||/^\1/s/^/;/|' file1 | sed -f - file2
000001 test1  
;000002 test2  
;000003 test3  
000004 test4  
000005 test5  
;000006 test6  
000007 test7