我有 2 个包含一些内容/行的文件。
例子 :
cat a.txt
1
2
3
4
cat b.txt
a
b
c
d
需要使用 for 循环获得以下输出
1 a
2 b
3 c
4 d
我已经尝试过下面的脚本,但它给出了错误的输出
for i in `cat a.txt`
do
for j in `cat b.txt`
do
echo $i and $j
done
done
1 and a
1 and b
1 and c
1 and d
2 and a
2 and b
2 and c
2 and d
3 and a
3 and b
3 and c
3 and d
4 and a
4 and b
4 and c
4 and d
请帮我做 For 循环。提前致谢
答案1
正如@ilkkachu 评论的那样,paste
这是最好的答案:
paste a.txt b.txt
或者,使用单个空格作为分隔符来代替制表符,
paste -d ' ' a.txt b.txt
对于仅 shell 的答案,首先不要读取行for
和为什么使用 shell 循环处理文本被认为是不好的做法?
您可以使用单个 while 循环同时读取 2 个文件中的行
while IFS= read -r lineA <&3; IFS= read -r lineB <&4; do
echo "$lineA $lineB"
done 3<a.txt 4<b.txt
如果您喜欢更多空白以提高可读性:
while IFS= read -r lineA <&3
IFS= read -r lineB <&4
do
echo "$lineA $lineB"
done 3<a.txt 4<b.txt
另一种选择:将每个文件读入数组,然后迭代数组索引。
mapfile -t a < a.txt
mapfile -t b < b.txt
for idx in "${!a[@]}"; do printf '%s %s\n' "${a[idx]}" "${b[idx]}"; done