0

基本上我尝试像这样在命令行中操作文件:

File1:
,1,this is some content,
,2,another content,
,3,blablabla,
,4,xxxxxxxx,
,5,yyyyyyyy,
,6,zzzzzzzzzz,
... ...



File2:
1
3
4 
5

现在我想保持 file1 的内容在 file2 中具有相同的列号,所以输出应该是:

,1,this is some content,
,3,blablabla,
,4,xxxxxxxx,
,5,yyyyyyyy,

我用过comm -3 file1 file2,但它不起作用。然后我尝试了 sed 但也没有用。还有其他方便的工具吗?

4

1 回答 1

2

以下将适用于给定的示例 - 如果数字出现在逗号后面的字符串中,它将不起作用:

grep -F -f File2 File1

另一种选择是

join -t, -1 2 -2 1 -o 1.1, 1.2, 1.3 File1 File2

以下是它的工作原理:

-t,将 `,` 视为终止符
-1 2 查看文件 1 中的第二列
-2 1 查看文件 2 中的第一列
-o 1.1, 1.2, 1.3 输出文件1的第一、二、三列

这仍然有一个缺点,如果后面的文本中有多个逗号,它会在第一个逗号之后终止(“字段 3”是最后一个输出)。

解决该问题需要使用xargs

join -t, -1 2 -2 1 -o 1.1, 1.2 File1 File2 | xargs -Ixx grep xx File1

解释:

-Ixxxx: 用前面命令的每个输出行替换后面命令中的字符串;为每一行执行该命令。这意味着我们将找到与第一行匹配的行,,number,这将使我们对其他任何内容都不敏感。

于 2013-03-13T17:18:21.423 回答