【发布时间】:2014-11-15 08:48:26
【问题描述】:
f1.txt
A, 77, 1, 2.0, !P , F, - ,
B, 77 , 4, 5, P, P, - ,
C, 88, 6, 7, F, P, -,
f2.txt
A, 77, 1, 2, P, F, P,
B, 77, 4, 5, F, P, P,
C, 88, 6, 7, F, P, P,
D, 99, 8, 9, P, P, F,
想要的输出
A, 77, 1, 2, P, not P(*), F, F, P, -,
B, 77, 4, 5, F, P(*), P, P, P, -,
C, 88, 6, 7, F, F, P, P, F, -,
D, 99, 8, 9, P, -, P, -, P, -,
基本上,匹配两个文件中的 4 列,然后合并每个文件中的替代列:匹配 4 列,然后是 f2_column5,然后是 f1_column5,如果不同,则添加 (*)(如果不可用,则 "-")
- 列数> 1000,
f1.txt的# 列和f2.txt的# 列不一样 -
f1.txt和f2.txt中的行数可以> 1000 并且不相同 - (如果可能的话,代码是否可以扩展为超过2个文件输入(f1,f2);例如,f3.txt是
f3.txt : B, 77 , 4, 5, P, P, - , 和所需的输出(对于 3 个输入文件 - f1.txt、f2.txt、f3.txt)
想要的输出
A, 77, 1, 2, P, not P(*), -, -, F, F, P, -, -,
B, 77, 4, 5, F, P(*), P(*), P, P, P, P, -, -,
C, 88, 6, 7, F, F, -, P, P, -, F, -, -,
D, 99, 8, 9, P, -, -, P, -, -, P, -, -,
| | |
f2.5th f2.6th f2.7th
================================================ =========================================
如果列数小于10,我可以使用下面的
awk 'FNR==NR {a[NR]=$1;
b[NR]=$2;
c[NR]=$3;
d[NR]=$4;
e[NR]=$5;
f[NR]=$6;
g[NR]=$7;
next}
{print $1,$2,$3,$4,$5,
( e[FNR]!="" ? e[FNR] : "-" ),
$6,
( f[FNR]!="" ? f[FNR] : "-" ),
$7,
( g[FNR]!="" ? g[FNR] : "-" ) }' f1.txt f2.txt
但这我假设f1.txt 和f2.txt 的4 列,不是我想要的;我想看看它是否匹配。我不知道如何处理大量列以及检查是否有 (*)。
【问题讨论】:
-
如果字符之间有两个空格,是否算作一列不可用?每列之间是否正好有一个空格?
-
空格的个数不固定,空格可以是字段分隔符或者文件可以有“,”作为字段分隔符(不过还是有空格的,即前导空格也要去掉as) ...另外,有多个文件(如 f1.txt),代码可以用于多个文件吗?我想问的另一件事是数字是否是浮点数,例如 8.2 那么如何将字符串“8.2”转换为数字“8.2”(我知道使用 int 将字符串转换为整数,但我没有看到任何字符串浮点数,反之亦然)。谢谢。
-
如果您有其他详细信息要添加到您的问题中,您应该对其进行编辑,以尽可能清楚地说明您想要做什么。
-
我确实详细更新了问题(输入文件和所需的输出)。谢谢。
标签: awk sed excel-2007