0

假设我有三个制表符分隔值数据文件:2011.txt2012.txt2013.txt. 每个文件具有相同的格式,其中行如下所示:

UserID    Data    Data    Data   ...

每个文件仅包含其命名年份的数据。对于在前一年或下一年都没有出现的用户 ID,我想丢弃这些文件中的所有数据。也就是说,我只想保留与 UserID 相关的数据,以便我可以连续跟踪 UserID 至少两年。我该怎么做呢?我常用的处理数据文件的工具是vim,并在命令行中使用简单perl的命令和正则表达式。如果有办法使用这些工具来做到这一点,我想这样做。但我乐于学习新工具。

作为大纲,我在想:

run through each UserID in 2011.txt
  if UserID doesn't appear in 2012.txt, delete this row from 2011.txt
run through each UserID in 2012.txt
  if UserID doesn't appear in either 2011.txt or 2013.txt, delete this row from 2012.txt
run through each UserID in 2013.txt
  if UserID doesn't appear in 2012.txt, delete this row from 2013.txt

但我从来没有修改过像这样访问多个文件的文件。

4

1 回答 1

1

用这个:

#!/bin/bash
while (( "$2" )); do
  cut $2 -f1 | sed 's/^/\^/' > p.$2
  grep $1 -f p.$2 > $1.new
  shift
done
rm -rf p.*

例子 :

$ cat 2011
1   d1  d2
2   d1  d2
3   d1  d2
4   d1  d2
5   d1  d2
6   d1  d2

$ cat 2012
1   d1  d2
3   d1  d2
4   d1  d2
6   d1  d2
7   d1  d2
8   d1  d2

$ cat 2013
1   d1  d2
2   d1  d2
4   d1  d2
5   d1  d2
6   d1  d2
8   d1  d2
10  d1  d2

运行脚本:

./script 2011 2012 2013

两个新文件:

$ cat 2011.new 
1   d1  d2
3   d1  d2
4   d1  d2
6   d1  d2

$ cat 2012.new 
1   d1  d2
4   d1  d2
6   d1  d2
8   d1  d2
于 2014-10-11T06:11:13.460 回答