Bash 根据列将数据分组到类别中
我有一个以制表符分隔的文件,它有两列,如下所示:Bash 根据列将数据分组到类别中,bash,text,awk,Bash,Text,Awk,我有一个以制表符分隔的文件,它有两列,如下所示: new.txt 1.01 yes 2.00 no 0.93 no 1.2223 yes 1.7211 no 我想修改它的内容,就好像有两个类别: new_categorized.txt yes no 1.01 2.00 1.2223 0.93 1.7211 我在R()中发现了一个类似的问题,但我需要用bash或awk来回答。。 非常感谢您的帮助。使用bash、GNU
new.txt
1.01 yes
2.00 no
0.93 no
1.2223 yes
1.7211 no
我想修改它的内容,就好像有两个类别:
new_categorized.txt
yes no
1.01 2.00
1.2223 0.93
1.7211
我在R()中发现了一个类似的问题,但我需要用bash或awk来回答。。
非常感谢您的帮助。使用bash、GNU grep和paste:
echo -e "yes\tno"
paste <(grep -Po '^\t\K.*(?=\tyes)' new.txt) <(grep -Po '^\t\K.*(?=\tno)' new.txt)
echo-e“是\t否”
使用bash、GNU grep和paste粘贴:
echo -e "yes\tno"
paste <(grep -Po '^\t\K.*(?=\tyes)' new.txt) <(grep -Po '^\t\K.*(?=\tno)' new.txt)
echo-e“是\t否”
粘贴$cat tst.awk
开始{FS=OFS=“\t”}
!(2美元,标签号2){
label2colNr[$2]=++numCols
colNr2label[numCols]=2美元
}
{
colNr=label2colNr[$2]
val[++numRows[colNr],colNr]=1美元
maxRows=(numRows[colNr]>maxRows?numRows[colNr]:maxRows)
}
结束{
对于(colNr=1;colNr$cat tst.awk
开始{FS=OFS=“\t”}
!($2标签颜色){
label2colNr[$2]=++numCols
colNr2label[numCols]=2美元
}
{
colNr=label2colNr[$2]
val[++numRows[colNr],colNr]=1美元
maxRows=(numRows[colNr]>maxRows?numRows[colNr]:maxRows)
}
结束{
对于(colNr=1;colNrGNUawk
解决方案:
awk '{ a[$2][($2=="yes"? ++y : ++n)]=$1 }
END{
max=(y > n? y:n);
print "yes","no";
for(i=1; i<=max; i++) print a["yes"][i], a["no"][i]
}' OFS='\t' file | column -tn
GNUawk
解决方案:
awk '{ a[$2][($2=="yes"? ++y : ++n)]=$1 }
END{
max=(y > n? y:n);
print "yes","no";
for(i=1; i<=max; i++) print a["yes"][i], a["no"][i]
}' OFS='\t' file | column -tn
谢谢您的回答。在这里,您是如何将输出定向到另一个文件的?{echo…;paste…;}>file.txt
.Last;
很重要。谢谢您的回答。在这里,您是如何将输出定向到另一个文件的?{echo…;paste…;}>file.txt
。Last;
很重要。谢谢。我试过了,但它给了我确切的new.txt而不是categories.。那根本不可能。你一定是复制/粘贴错了。对不起。你是对的,我错了。你的答案是works@EdMorton:我在那里回收了你的代码:@Cyrus很高兴听到。这应该是一个常见问题解答:-)。谢谢。我试过了,但它给了我确切的new.txt而不是categories.。那根本不可能。你一定是复制/粘贴错了。对不起。你是对的,我有一个拼写错误。你的答案是works@EdMorton:我在那里回收了你的代码:@Cyrus很高兴听到。这应该是一个常见问题解答:-)。谢谢,但它抱怨为:awk:line 1:语法错误在或附近[awk:line 5:语法错误在或附近[@bapos,1)检查您的awk版本;2)检查您的代码是否有错误。这是一个屏幕截图,谢谢,但它抱怨为:awk:line 1:语法错误在或附近[awk:line 5:语法错误在或附近[@bapos,1)检查您的awk版本;2)检查您的代码是否有错误。这是一个屏幕截图
yes no
1.01 2.00
1.2223 0.93
1.7211