ksh递增while循环参数



在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,而不是将第二个文件的最后七行和三次"浪费"打印到新文件中,我的Winscp在运行脚本时将显示10次"浪费"。

假设文件1和文件2中的行数相同,并且文件1的每一行都是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

适用于我的(非常(小的测试文件。。。

我看不出问题出在哪里。也许file1在"N"后面有其他字符,如空格N、其他字符NOr(Windows文件(。或小写n

另一种解决方案可能是使用paste。查找不在file1中的字符(例如#(,并使用该字符将两个文件粘贴在一起
用10行测试解决方案,而不是10亿行(对其他答案进行评论(。

paste -d'#' file1 file2

也许您在应该以N#开头的行中看到了一些奇怪的内容。现在,您可以使用sed打印p行或使用w写入文件。

paste -d'#' file1 file2 | sed -n 's/^N#.*/waste/p;s/^[^#]*#//w newfile'

最新更新