Bash:在保留行顺序的同时替换列的值。

时间:2015-06-08 09:15:51

标签: bash for-loop sed string-comparison

我有一个文件,FILE1,大约有19.000行,格式如下:

PAAXXXX PAAXXXX 0 0 1 -9
PAAXXXY PAAXXXY 0 0 1 -9
PAAXXYX PAAXXYX 0 0 2 -9
PAAXYXX PAAXYXX 0 0 2 -9
PAAYXXX PAAYXXX 0 0 1 -9
PAAYYXX PAAYYXX 0 0 1 -9
PAAYYYX PAAYYYX 0 0 2 -9
PAAAAAB PAAAAAB 0 0 1 -9

第1列和第2列中的ID在每种情况下都相同,第3列和第4列始终为0,第5列为1或2,第6列始终为-9。

我还有两个文件,FILE2和FILE3,它们只包含ID并且不重叠。例如:

head -3 FILE2
    PAAXXYX 
    PAAXYXX
    PAAYXXX

head -2 FILE3
    PAAYYYX
    PAAAAAB

我想根据col1或col2与文件2和3中的ID的重叠来更改FILE1中col6的值。具体来说,我想为FILE2中找到的所有ID和第2列分配1到1在FILE3中找到的所有ID。因此,我的最终输出可能如下所示:

PAAXXXX PAAXXXX 0 0 1 -9
PAAXXXY PAAXXXY 0 0 1 -9
PAAXXYX PAAXXYX 0 0 2 1
PAAXYXX PAAXYXX 0 0 2 1
PAAYXXX PAAYXXX 0 0 1 1
PAAYYXX PAAYYXX 0 0 1 -9
PAAYYYX PAAYYYX 0 0 2 2
PAAAAAB PAAAAAB 0 0 1 2

请注意,如果在FILE2或FILE3中找不到FILE1中的某些ID,我想保留原始值。此外,输出顺序不变也至关重要。可以通过两个步骤解决问题,首先将FILE1与FILE2进行比较,然后将FILE1与FILE3进行比较。

我觉得我的问题可能通过在for循环中运行sed来解决,但到目前为止我一直没有成功。非常感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

在awk中,使用ARGIND

 Typeface tf = Typeface.createFromAsset(vi.getContext().getAssets(), "font/chiller.ttf");
 holder.tvName.setTypeface(tf);
相关问题