AWK 命令用于将两个文件合并为单独的“:”,如输出

问题描述 投票:0回答:1

考虑:

文件1

1
2
3

文件2

23
45
27
67
867

输出

1:23
1:45
1:27
1:67
1:867
2:23
2:45
2:27
2:67
2:867
3:23
3:45
3:27
3:67
3:867

如何使用文件 1 和文件 2 中的分隔符 ':' 使用 AWK 来命令此输出(如输出)?

linux awk command
1个回答
1
投票

有很多方法可以解决您的问题;这适合您的用例吗?

awk 'NR==FNR{a[++n]=$0; next} {for (i=1; i<=n; i++) {print $0 ":" a[i]}}' file2 file1
1:23
1:45
1:27
1:67
1:867
2:23
2:45
2:27
2:67
2:867
3:23
3:45
3:27
3:67
3:867

具有更好的格式和注释

awk '
NR==FNR{                                # for the first file
       a[++n]=$0                         # load values into an array
       next                             # then skip to the next line/file
}

{
       for (i=1; i<=n; i++) {   # for all the items in the array
              print $0 ":" a[i]         # print the value from file1, then the value from the array
       }
}' file2 file1
1:23
1:45
1:27
1:67
1:867
2:23
2:45
2:27
2:67
2:867
3:23
3:45
3:27
3:67
3:867

或者,也许与 GNU 并行:

parallel echo {1}":"{2} :::: file1 :::: file2
1:23
1:45
1:27
1:67
1:867
2:23
2:45
2:27
2:67
2:867
3:23
3:45
3:27
3:67
3:867

编辑

如果您的输入中有

<br/>
字符,您可以使用以下方法删除任何非数字内容:

awk 'NR==FNR{gsub("[^0-9]", "", $0); a[++n]=$0; next} {for (i=1; i<=n; i++) {gsub("[^0-9]", "", $0); print $0 ":" a[i]}}' file2 file1
© www.soinside.com 2019 - 2024. All rights reserved.