![如何使paste -d 第二个文件在循环时打印下来?](https://linux22.com/image/159837/%E5%A6%82%E4%BD%95%E4%BD%BFpaste%20-d%20%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%96%87%E4%BB%B6%E5%9C%A8%E5%BE%AA%E7%8E%AF%E6%97%B6%E6%89%93%E5%8D%B0%E4%B8%8B%E6%9D%A5%EF%BC%9F.png)
我想让第二个文件标签“b”向下打印第一个文件标签“a”,就像向下移动文件创建新行一样,我希望它一直向下打印,直到第二个文件的第一行到达最后一行第一个文件的行。我是否必须将其放入文件本身,或者我可以从终端执行此操作吗?
它现在做什么:
paste -d ' ' a b
1 a
2 b
3 c
4 d
5 e
6
7
8
9
期望的输出:
1 ↓
2 a
3 b
4 c
5 d
6 e
7
8
9
1
2
3 ↓
4 a
5 b
6 c
7 d
8 e
9
Re-looping
1 b
2 c
3 d
4 e
5
6
7 ↓
8 List is about to loop
9 a
答案1
这篇文章不会直接解决您的问题,但会引导您走向接近您正在寻找的方向。
PS:顺便说一句,我不会用于paste
这项数据处理工作。我会选择 awk 或其他更合适的工具。
无论如何,使用paste
,您可以考虑以下“脏”解决方案:
情况1:
$ k=3
$ paste -d ' ' a <(printf ' %.0s\n' $(seq 1 $k);cat b)
1
2
3
4 a
5 b
6 c
7 d
8 e
9
#You can adjust the value of $k with a kind of loop
案例2:
$ k=3
$ s=4
$ paste -d ' ' a <(printf ' %.0s\n' $(seq 1 $k);tail -n +$s b)
1
2
3
4 d
5 e
6
7
8
9
答案2
如果目的是创建 中 中的单词a
与 中 中的单词的叉积b
,您可以join
像这样使用:
$ join -1 2 -2 2 a b
1 a
1 b
1 c
1 d
1 e
2 a
2 b
2 c
2 d
2 e
3 a
3 b
3 c
3 d
3 e
4 a
4 b
4 c
4 d
4 e
5 a
5 b
5 c
5 d
5 e
6 a
6 b
6 c
6 d
6 e
7 a
7 b
7 c
7 d
7 e
8 a
8 b
8 c
8 d
8 e
9 a
9 b
9 c
9 d
9 e
在不存在的字段上连接文件将创建两个文件中行的所有可能组合。请注意,这会在每行的开头插入一个空格。