bash - Bash - 删除目录中只有一列的制表符分隔文件
问题描述
这是一个奇怪的问题,但我在一个目录中有一些文件应该代表表/数据框。所有文件都有一列(对应于该表的主键)。然后其中一些有额外的列。我想删除所有只有一列的文件(即没有信息)。我该怎么做呢?
例子:
file1
.txt`
Probe_ID GSM132623 GSM132624
1007_s_at 2837.69027061651 2569.91309822531
1053_at 201.081555674069 262.183863416559
117_at 210.403458841772 298.823864999618
121_at 1336.98480463819 1302.96339762767
1255_g_at 70.4408895702285 79.4993012107624
1294_at 464.670062349198 419.035541864715
1316_at 125.550889354316 138.930668105088
1320_at 262.68745143115 208.905917842229
1405_i_at 13.6321130349956 17.7600809690828
file2.txt
Probe_ID
100_g_at
1000_at
1001_at
1002_f_at
1003_s_at
1004_at
1005_at
1006_at
1007_s_at
在这种情况下,我想file2.txt
从我的目录中删除。
编辑:哦,所有文件都将具有file*.txt
. 所以我只想查看这些文件。不是我目录中的其他人。
解决方案
您可以尝试以下任何选项:
选项一
用awk获取第一行的file*.txt
列数,如果列数等于,则删除与模式匹配的所有文件1
for i in file*.txt; do cols=$(awk -F'\t' '{print NF; exit}' "$i"); if [ $cols -eq 1 ]; then rm -f "$i"; fi; done
选项二
获取第一行的列数,如果列数等于,则head -1 "$i" | tr '\t' '\n' | wc -l
删除与模式匹配的所有文件file*.txt
1
for i in file*.txt; do cols=$(head -1 "$i" | tr '\t' '\n' | wc -l); if [ $cols -eq 1 ]; then rm -f "$i"; fi; done
推荐阅读
- c++ - new int[3] 会对 int 指针做什么?
- python - pytorch 自定义损失函数 nn.CrossEntropyLoss
- dash-shell - 如何将命令行参数传递给从标准输入执行的脚本
- tesseract - 我可以对这些验证码应用什么样的图像处理以使它们对 tesseract 可读?
- php - 有人可以帮我编辑这个 Drupal 模块代码来计算所有产品选项的价格,而不仅仅是第一个选项吗?
- c++ - 为什么两个 getline() 导致没有输入?
- python - 简单时间表的机器学习
- machine-learning - 图神经网络 (GNN) 是否可以从具有不同节点数的多个图中执行节点分类?
- reactjs - 如何使用反应钩子同步文本区域?
- node.js - 我的机器人在我发送消息时删除了我的所有消息