在Ksh中,我有一个while循环,可以读取2个文件。如果文件1的当前行为“ Y”,则将文件2的当前行回显到新文件中,如果文件1的当前行为“ N”,则在winscp中回显“浪费”。
while IFS= read xxxx && IFS= read yyyy <&4; do
if [[ ${xxxx} = "N" ]];then
echo waste
else
echo "$yyyy" .>> $newfile
fi
done <"$file1" 4<"$file2"
但是,如果文件1的前三行为N,其余的七行为Y,则在打印3次“浪费”并将第二个文件的后7行打印到新文件中时,我的Winscp将显示10倍“浪费”,而运行脚本。
答案 0 :(得分:0)
假设file1和file2中的行数相同,并且file1的每一行都是N或Y,则可以使用类似的内容:
#!/bin/ksh
testArray=($(cat file1.txt))
i=0
while read line; do
if [[ ${testArray[$i]} == "N" ]]; then
print "waste"
else
print $line >> file3.txt
fi
((i++))
done < file2.txt
或跟随评论
#!/bin/ksh
while read -r -u 3 line1 && read -r -u 4 line2; do
if [[ $line1 == "N" ]]; then
print "waste"
else
print $line2 >> file3.txt
fi
done 3<file1.txt 4<file2.txt
处理我的(非常)小的测试文件...
答案 1 :(得分:0)
我看不出是什么问题。也许file1
在'N'之后还有其他字符,例如空格N
,其他字符NO
或\r
(Windows文件)。或小写的n
。
另一个解决方案可能是使用paste
。查找不在file1中的字符(例如#
),然后使用该字符将两个文件粘贴在一起。
并用10条线(而不是十亿条线)测试解决方案(对其他答案的评论)。
paste -d'#' file1 file2
也许您在应该以{{1}}开头的行上看到了一些奇怪的东西。
现在,您可以将N#
用于sed
的打印行或p
写入文件。
w