我正在调查Sed或Awk来解决这个问题,但我完全迷失了。没有一个起点。 我有一堆文件,所以我想使用分隔符(,)并使用索引/数组来复制一个值并替换另一个索引/数组。
JOIN
由于array [6]在第一行是空的。我想将数组[6]从第二行复制到第一行。我很清楚如何查看文件并确定数组[6]是空的,但我不知道如何复制第二行数组[6]并替换它之前的行。任何提示? 结果应该是:
0001,324434344,Sterner,Erik B,B.A,1987
0002,324434344,Sterner,Erik B,M.A,2001,Columbia University
答案 0 :(得分:6)
扭转线条!然后,存储第六个字段的最新非空值并在找到空白值时插入它应该是微不足道的。完成后再次反转线条。
tac file.csv | perl -F, -alne '
$last = $F[6] if $F[6];
$F[6] ||= $last if $last;
print join ",", @F;
' | tac
如果您使用BSD衍生产品,则可以使用tail -r
代替tac
。
答案 1 :(得分:2)
如果我们假设ID存储在第二列中,您可以例如说:
$ awk 'BEGIN{FS=OFS=","} FNR==NR {a[$2]=$NF; next} NF<7{$(NF+1)=a[$2]}1' file file
0001,324434344,Sterner,Erik B,B.A,1987,Columbia University
0002,324434344,Sterner,Erik B,M.A,2001,Columbia University
这两次读取文件:一次存储数据然后打印。
在第一次迭代中,它填充数组data[2nd field] = last field
。然后,在第二次迭代时,如果行包含少于7列,则添加该字段。