我有两个文本文件。这两个文件的结构是一样的。我有一个while循环,它同时从这两个文本文件中读取。但是这两个文件都不需要,前4行。所以我需要的是,在我的程序开始时,两个头将跳转到这两个文件的第4行,然后开始读取我的while循环。 这是我目前的代码
while read compareFile1 <&3 && read compareFile2 <&4; do
echo $compareFile1
echo $compareFile2
done 3<test1.txt 4<test2.txt
这是我的示例文件..
=== Predictions on test data ===
inst# actual predicted error prediction (id)
1 1:positive 1:positive 0.774 (10001996.txt)
2 1:positive 2:negative + 0.889 (10003432.txt)
3 1:positive 1:positive 1 (10003865.txt)
4 1:positive 1:positive 0.999 (10004065.txt)
5 1:positive 1:positive 0.991 (10004266.txt)
6 1:positive 1:positive 0.999 (10006157.txt)
7 1:positive 1:positive 0.869 (10007003.txt)
8 1:positive 2:negative + 1 (10008447.txt)
9 1:positive 1:positive 0.998 (10009702.txt)
10 1:positive 1:positive 0.994 (10011072.txt)
我怎么能用bash做到这一点?我正在使用mac。感谢。
答案 0 :(得分:2)
您可以使用tail
实用程序。默认情况下,它输出文件的最后10行,但它也有一些非常有用的参数。要跳过前X行,请使用-n+X
。
示例:
tail -n+5 myfile.txt
将从第5行输出整个文件(跳过前4行)。
但在你的情况下,你可以简单地增加一个变量来开始第4行的处理。例如:
l=0
while read compareFile1 <&3 && read compareFile2 <&4; do
if [[ $l < 4 ]]; then
l=$((l+1));
else
# do your processing here
echo $compareFile1
echo $compareFile2
fi
done 3<test1.txt 4<test2.txt
答案 1 :(得分:0)
这是另一种选择,它避免在shell循环中读取这两个文件:
nl File1.txt | paste - File2.txt | sed -n '5,$ p'
它在第一列中生成行号(通过nl
),然后是第一个文件的内容,后跟第二个文件的内容。 sed
命令删除前四行。
而不是sed
,您可以插入awk
并访问文件中的字段。
根据文件大小,这可能会更快。
答案 2 :(得分:-1)
要读取除myfile的前4行以外的所有行: tail -n +4 myfile