我在标签分隔的文本文件中有一个类似于数据的矩阵。例如:
a b c d
a 0.1 0.5 0.3 0.0
b 0.9 0.2 0.4 0.7
c 0.2 0.0 0.6 0.5
d 0.0 0.5 0.3 0.1
我想要这个矩阵数据在tsv文件中,例如第一列是行索引,第二列是列索引,第三列是值。例如,前4行如下:
a a 0.1
a b 0.5
a c 0.3
a d 0.0
我的档案很大。它大约是5000×5000矩阵;因此开始输入文件有大约5000行和5000列。我
input_file
A B C D;X;Y 0
C D E F;Z;X 1
Output_file
A B C D;X;Y;0
C D E F;Z;X;1
我想将input_file的最后一列与倒数第二列合并,并在倒数第二列中用";“分隔最后一列的值(就像input_file的第4列一样)。因此,output_file少了一列。每一行都没有不同的模式,所以我可以使用grep,但是我可以使用"while read line“,但不知道如何将sed应用于每行中的最后一列条目。谢谢
690070 690070 A
690451 690451 B
690571 690571 C
690578 690578 D
690637 690637 F
如何用序号替换第一列值,从1.n开始。因此,它变成:
1 690070 A
2 690451 B
3 690571 C
4 690578 D
5 690637 F
这可以在Vim或某些linux命令中完成吗?
如果前两列在两个变量中相同,则需要替换第三列的值。
我尝试:使用NR===FNR存储第一个变量的第一列和第二列。如果第一列和第二列相同,则将变量"b“的第三列替换为变量"s”的第三列。但是,执行$3=$3没有任何意义。
awk 'NR==FNR{a[$1FS$2]=$1FS$2;next} $1FS$2 in a {$3=$3}1' <(echo "$s") <(echo "$b")
NODE AREA-29 1 UP ENABLED PINGABLE ASIA ACTIVE
NODE AREA-21 1 UP ENA
假设我有以下两个文件,其中有这样的条目(number、IP和User):
30000 11.11.11.11 Dalvik/2.1.0 Linux
10000 22.22.22.22 GetintentCrawler getintent.com
5000 33.33.33.33 Mozilla/5.0 X11; Linux i686 AppleWebKit/537.36 KHTML, like Gecko Chrome/43.0.2357.130 Safari/537.36
3000 44.44.44.44 Mozilla/5.0 Macintosh; Intel Mac OS X 10_