新手寻求帮助
我有一个大文件(2000+行,1455列)
awk '{for (i=3; i<=NF; i++) if ($i<200) print} {next}' table.txt
这就是我现在正在处理的 - 但它会迭代行(?)(从第 6 列 - 示例 1 开始),并在每次在该行中找到小于 200 的值时打印同一行,而不是直接转到打印后下一行。
awk '{for (i=3; i<=NF; i++) if ($i<200) print} {next}' table.txt
table.txt(小选)
基因 | targ_bp | s_1 | s_2 | s_3 |
---|---|---|---|---|
GNB1 | 217 | 53 | 102 | 1121 |
GNB1 | 202 | 1112 | 96 | 1226 |
GNB1 | 163 | 1141 | 1162 | 1181 |
使用当前代码输出:
| GNB1 | 217 | 217 53 | 53 102 | 102第1121章
| GNB1 | 217 | 217 53 | 53 102 | 102第1121章| GNB1 | 202 | 202 1112 | 1112 96 | 96第1226章
想要的:
您可以迭代文件两次,首先获取列,然后打印列。一些事情:
# generate comma separated list of columns we want to print
columns=$(awk '
{
for (i=6; i<=NF; i++)
# If the column was not handled, and it has value below 200
if (!(i in cols) && $i<200)
# Add it as an index in cols variable
cols[i]=1
}
END{
for (i in cols) print i
}' input.txt |
# Join columns numbers using comma
paste -sd,
)
# Output only columns from input.txt.
cut -d'\t' -f"$columns" input.txt
# If you do not know if it's tab or space, you can squeeze first
tr -s ' \t' '\t' < input.txt | cut -d$'\t' -f"$columns"