我有下表
textA textB 1,21,41 10,30,50
textC textB 2,22,42,62 10,30,50,70第三栏的数值应从第四栏元素中减去,即10-1,30-21,50-41,然后10-2,30-22,50-42,70-62。所需结果应打印在第五个选项卡分隔的列中。输出表应该如下所示
textA textB 1,21,41 10,30,50 9,9,9
textC textB 2,22,42,62 10,30,50,70 8,8,8,8我尝试合并了一些awk代码行:
(伪)代码行理论上可以在一列中减去多个值,这与列中有多少值无关。
awk '{for(i=1;i<=NF;i++)x-=$i;print x}' fileA我现在根据我的第三和第四列生成两个独立的文件。
awk -F'\t' '{print $3}' fileA > fileB
awk -F'\t' '{print $4}' fileA > fileC(伪)代码第三行理论上可以处理来自不同文件的值。
awk 'NR==FNR{a[NR]=$1;next}{print $1+a[FNR],$2}' file1 file2我尝试将第一行代码与第三行代码组合起来:
awk 'NR==FNR{a[NR]=$1;next}{print $1+a[FNR],{for(k=1;k<=NF;k++)z-=$i;print z}$2}' fileB fileC那就是我被困在那里的地方。任何想法我都会高兴的。
发布于 2016-10-15 14:21:32
不需要任何临时文件。这可以使用对awk的一次调用完成:
BEGIN {
FS = OFS = "\t"
}
{
n = split($3 "," $4, a, /,/) / 2
printf "%s%s", $0, OFS
for (i = 1; i <= n; ++i)
printf "%d%s", a[i+n]-a[i], (i<n?",":ORS)
}分隔逗号上的第三列和第四列。打印这一行,然后是一个制表符,然后是每个减法的结果。
假定第三列和第四列中的数字数目相等。
像awk -f script.awk file一样运行脚本。
https://stackoverflow.com/questions/40059975
复制相似问题