将每行中的元素处理为多行

时间:2017-04-05 10:38:21

标签: bash awk sed

我需要处理文件的帮助,该文件包含多行以逗号分隔的元素。该文件如下所示:

文件-1.txt的

54, 75, 19, 123, 74, 15, 10, 117 
54, 75, 19, 45, 74, 15, 10, 117 
54, 29, 19, 123, 74, 15, 10, 117 
54, 29, 19, 45, 74, 15, 10, 117  

我想将每行的逗号分隔值转换为由制表符分隔的两列,如下所示:

OUTPUT_FILE:

54  75
75  19
19  123
123 74
74  15
15  10
10  117

同样,每行保存到一个单独的文件中,该文件以原始行的第一个和最后一个数字命名,后跟行号,如下所示

Output_file 1

ABC-54_117-1

54  75
75  19
19  123
123 74
74  15
15  10
10  117

Output_file 2

ABC-54_117-2

54  75
75  19
19  45
45  74
74  15
15  10
10  117 

以及其他两行也是如此。在这种情况下,它是一个文件中的4行,但我有很少的文件有很多行,需要以相同的方式处理。我用awk,sed尝试过脚本,但根本无法破解它。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

您可以使用此awk

awk -F', +' '{f=$1"_"$NF"_"NR; for (i=1; i<NF; i++){print $i,$(i+1)>f}}' OFS='\t' file

输出:

$ ls
54_117_1  54_117_2  54_117_3  54_117_4

$ cat 54_117_2
54  75
75  19
19  45
45  74
74  15
15  10
10  117

答案 1 :(得分:0)

完整的解决方案是:

32

我们首先为File-1.txt中的每条记录增加cnt。我们知道每行中有8个逗号分隔字段,因此我们使用8循环的for循环,并在循环内部使用system命令将变量对回显到使用cnt变量和第8个分隔字段构造的文件。函数gensub用于删除第8个字段中的任何空格。