gpt4 book ai didi

linux - 删除空格 comm 输出

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:33:12 24 4
gpt4 key购买 nike

我有两个 ID 列表,我正在使用 comm 命令进行比较。我的问题是输出看起来像这样:

YAL002W
YAL003W
YAL004W
YAL005C
YAL008W
YAL011W

我想做的就是尝试以某种方式对其进行管道传输,以便在写入文件时不带空空间,当我在 excel 中打开此文件时,它会转换为白色单元格。我已经尝试了我发现的所有可能的 grep、awk 和 sed 组合来删除空格而没有运气......
所以我得出的结论是列分别由一个或两个制表符分隔,因此我不能删除它们就像删除空格一样容易,而不删除文件的格式。

欢迎任何帮助或建议。谢谢

编辑:

我希望我的输出是三列,制表符分隔,没有空格

YAL002W YAL004W YAL008W
YAL003W YAL005C
YAL011W

EDIT2 避免引用的 XY 问题:

原始问题 (X):我必须列出并且我想在两个列表之间找到常见的和独特的词(稍后生成维恩图)。所以 comm 似乎是完美的解决方案,因为我同时获得了所有三个列表,稍后我可以轻松地将其导入 excel。

次要问题(Y):生成的三列不是三列(或者我开始这么想)因为我不能cut -f他们,我也不能使用通常的 awk 'NF'grep . 删除空格(例如)。

最佳答案

给定此输入和 comm 输出:

$ cat file1
YAL002W
YAL003W
YAL008W

$ cat file2
YAL004W
YAL005C
YAL008W
YAL011W

$ comm file1 file2
YAL002W
YAL003W
YAL004W
YAL005C
YAL008W
YAL011W

这将完成您的要求:

$ cat tst.awk
BEGIN { FS=OFS="\t" }
{
colNr = NF
rowNr = ++rowNrs[colNr]
val[rowNr,colNr] = $NF
numCols = (colNr > numCols ? colNr : numCols)
numRows = (rowNr > numRows ? rowNr : numRows)
}
END {
for (rowNr=1; rowNr<=numRows; rowNr++) {
for (colNr=1; colNr<=numCols; colNr++) {
printf "%s%s", val[rowNr,colNr], (colNr<numCols ? OFS : ORS)
}
}
}

.

$ comm file1 file2 | awk -f tst.awk
YAL002W YAL004W YAL008W
YAL003W YAL005C
YAL011W

但当然你可以跳过对 comm 的调用并立即使用 awk:

$ cat tst.awk
BEGIN { FS=OFS="\t" }
NR==FNR {
file1[$0]
next
}
{
if ($0 in file1) {
colNr = 3
delete file1[$0]
}
else {
colNr = 2
}
rowNr = ++rowNrs[colNr]
val[rowNr,colNr] = $0
}
END {
for (v in file1) {
colNr = 1
rowNr = ++rowNrs[colNr]
val[rowNr,colNr] = v
}

numRows = (rowNrs[1] > rowNrs[2] ? rowNrs[1] : rowNrs[2])
numRows = (numRows > rowNrs[3] ? numRows : rowNrs[3])
numCols = 3
for (rowNr=1; rowNr<=numRows; rowNr++) {
for (colNr=1; colNr<=numCols; colNr++) {
printf "%s%s", val[rowNr,colNr], (colNr<numCols ? OFS : ORS)
}
}
}

.

$ awk -f tst.awk file1 file2
YAL002W YAL004W YAL008W
YAL003W YAL005C
YAL011W

关于linux - 删除空格 comm 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49681893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com