ksh 递增 while 循环参数
ksh increment the while loop argument
在 Ksh 中,我有一个读取 2 个文件的 while 循环。如果文件 1 的当前行是 "Y" 则将文件 2 的当前行回显到新文件中,如果文件 1 的当前行是 "N" echo "waste" in 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,而不是打印三次 "waste" 并将第二个文件的最后七行打印到新文件中,我的 Winscp 显示 10 次"waste" 而 运行 脚本。
假设 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
适用于我的(非常)小的测试文件...
我看不出是什么问题。也许 file1
在 'N' 之后还有其他字符,例如 space N
、其他字符 NO
或 \r
(Windows 文件)。或者小写n
.
另一个解决方案可能是使用 paste
。查找不在 file1 中的字符(例如 #
),并使用该字符将两个文件粘贴在一起。
并用 10 行而不是十亿行测试解决方案(对其他答案的评论)。
paste -d'#' file1 file2
也许您在应该以 N#
开头的行中看到了一些奇怪的东西。
现在您可以使用 sed
打印 p
行或 w
写入文件。
paste -d'#' file1 file2 | sed -n 's/^N#.*/waste/p;s/^[^#]*#//w newfile'
在 Ksh 中,我有一个读取 2 个文件的 while 循环。如果文件 1 的当前行是 "Y" 则将文件 2 的当前行回显到新文件中,如果文件 1 的当前行是 "N" echo "waste" in 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,而不是打印三次 "waste" 并将第二个文件的最后七行打印到新文件中,我的 Winscp 显示 10 次"waste" 而 运行 脚本。
假设 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
适用于我的(非常)小的测试文件...
我看不出是什么问题。也许 file1
在 'N' 之后还有其他字符,例如 space N
、其他字符 NO
或 \r
(Windows 文件)。或者小写n
.
另一个解决方案可能是使用 paste
。查找不在 file1 中的字符(例如 #
),并使用该字符将两个文件粘贴在一起。
并用 10 行而不是十亿行测试解决方案(对其他答案的评论)。
paste -d'#' file1 file2
也许您在应该以 N#
开头的行中看到了一些奇怪的东西。
现在您可以使用 sed
打印 p
行或 w
写入文件。
paste -d'#' file1 file2 | sed -n 's/^N#.*/waste/p;s/^[^#]*#//w newfile'