linux - 如何将多行更改为列
问题描述
我有一个文件如下,并且想在找到指定行时更改为列(这里是del_size fq
)。
$ cat file.txt
del_size fq
0 13452
-1 13034
del_size fq
0 13
-1 0
-2 2155
del_size fq
0 6600
-1 8
-2 0
任何帮助深表感谢。谢谢。
解决方案
复杂的 GNUawk
解决方案:
awk '{
if (/^del_size/) {
h = (h? h OFS : "") $0; cnt++;
if (r_cnt > max_rows) max_rows = r_cnt;
i = j = r_cnt = 0
}
else {
arr[cnt][++i] = $0;
r_cnt++
}
next
}
END{
print h;
for (i = 1; i <= max_rows; i++) {
for (j = 1; j <= cnt; j++) {
items = arr[j][i];
if (items == "") items = "" OFS "";
printf "%s%s", (j == 1 ? "" : OFS), items
}
print ""
}
}' OFS='\t' file
输出:
del_size fq del_size fq del_size fq
0 13452 0 13 0 6600
-1 13034 -1 0 -1 8
-2 2155 -2 0
推荐阅读
- r - 使用回归预测的对数变化值来预测未来价格
- excel - 引用文件名不断变化的工作簿 - 解决方案建议?
- google-apps-script - 从谷歌表复制 A1 值并复制到其他谷歌表 B 列中的第一个空行
- python - Python不在for循环中打印文件内容
- r - 具有多个组和多个特征的非配对 t 检验的 R 代码
- python - 使用 Keras(或任何其他库)为半百万图像自定义 ImageDataGenerator(),其中标签和像素位于 2 个单独的 DataFrame 中
- node.js - 在外部模块中调用函数表达式
- dart - 如何映射/“重新接收” StreamController 的输入端
- python - 在 numba 并行化中理解这种竞争条件
- haskell - 如何使用foldr在Haskell中制作两个列表的元组积?