我的两个输入文件如下:
新
111
222
333
旧
555
666
我想合并它们以获得以下输出
111
555
222
666
333
这是我到目前为止所尝试的
i=1
while read line
do
head -$i $1 | tail -1
head -$i $2 | tail -1
i=$(($i+1));
done < $1
这是我收到的输出
111
555
222
666
333
666
如何防止它两次使用'old'中的最后一行?如果第二个文件大于第一个文件,它也应该能够合并这两个文件。
答案 0 :(得分:2)
你应该只使用粘贴:
paste -d"\n" /tmp/file1 /tmp/file2
答案 1 :(得分:1)
如果OP实际上只想进行实验head
和tail
,那么这是对其代码的修改:
lenA=`wc -l $1 | awk '{print $1}'`
lenB=`wc -l $2 | awk '{print $1}'`
i=1
while read line
do
tail -$(($lenA - $i + 1 >= 0?$lenA - $i + 1:0)) $1 | head -1
tail -$(($lenB - $i + 1 >= 0?$lenB - $i + 1:0)) $2 | head -1
i=$(($i+1));
done < $1
答案 2 :(得分:1)
以下是仅使用bash
的方法:
while true; do
read -r newline
read -r oldline <&3
if [[ -z "$newline" && -z "$oldline" ]]; then
break;
fi
if [[ ! -z "$newline" ]]; then
echo "$newline"
fi
if [[ ! -z "$oldline" ]]; then
echo "$oldline"
fi
done <new 3<old
<强>输出:强>
111
555
222
666
333
答案 3 :(得分:0)
您可以在一个文件上使用BASH read
循环并将增量变量传递给awk
以从另一个文件中获取相同的行号,以便您可以按照所需的顺序打印它们。 / p>
#!/bin/bash
i=1
while read line; do
echo $line
awk -v i=$i 'NR==i' $2
((i++))
done < $1